text:
/* MACHINE GENERATED FILE, DO NOT EDIT */

package org.lwjgl.opengl;

import org.lwjgl.LWJGLException;
import org.lwjgl.LWJGLUtil;
import java.util.Set;
import java.util.HashSet;

public class ContextCapabilities {
	static final boolean DEBUG = false;
	final APIUtil util = new APIUtil();
	final StateTracker tracker = new StateTracker();

	public final boolean GL_AMD_blend_minmax_factor;
	public final boolean GL_AMD_conservative_depth;
	public final boolean GL_AMD_debug_output;
	public final boolean GL_AMD_depth_clamp_separate;
	public final boolean GL_AMD_draw_buffers_blend;
	public final boolean GL_AMD_multi_draw_indirect;
	public final boolean GL_AMD_name_gen_delete;
	public final boolean GL_AMD_performance_monitor;
	public final boolean GL_AMD_pinned_memory;
	public final boolean GL_AMD_query_buffer_object;
	public final boolean GL_AMD_sample_positions;
	public final boolean GL_AMD_seamless_cubemap_per_texture;
	public final boolean GL_AMD_shader_stencil_export;
	public final boolean GL_AMD_shader_trinary_minmax;
	public final boolean GL_AMD_sparse_texture;
	public final boolean GL_AMD_stencil_operation_extended;
	public final boolean GL_AMD_texture_texture4;
	public final boolean GL_AMD_transform_feedback3_lines_triangles;
	public final boolean GL_AMD_vertex_shader_layer;
	public final boolean GL_AMD_vertex_shader_tessellator;
	public final boolean GL_AMD_vertex_shader_viewport_index;
	public final boolean GL_APPLE_aux_depth_stencil;
	public final boolean GL_APPLE_client_storage;
	public final boolean GL_APPLE_element_array;
	public final boolean GL_APPLE_fence;
	public final boolean GL_APPLE_float_pixels;
	public final boolean GL_APPLE_flush_buffer_range;
	public final boolean GL_APPLE_object_purgeable;
	public final boolean GL_APPLE_packed_pixels;
	public final boolean GL_APPLE_rgb_422;
	public final boolean GL_APPLE_row_bytes;
	public final boolean GL_APPLE_texture_range;
	public final boolean GL_APPLE_vertex_array_object;
	public final boolean GL_APPLE_vertex_array_range;
	public final boolean GL_APPLE_vertex_program_evaluators;
	public final boolean GL_APPLE_ycbcr_422;
	public final boolean GL_ARB_ES2_compatibility;
	public final boolean GL_ARB_ES3_compatibility;
	public final boolean GL_ARB_arrays_of_arrays;
	public final boolean GL_ARB_base_instance;
	public final boolean GL_ARB_blend_func_extended;
	public final boolean GL_ARB_cl_event;
	public final boolean GL_ARB_clear_buffer_object;
	public final boolean GL_ARB_color_buffer_float;
	public final boolean GL_ARB_compatibility;
	public final boolean GL_ARB_compressed_texture_pixel_storage;
	public final boolean GL_ARB_compute_shader;
	public final boolean GL_ARB_conservative_depth;
	public final boolean GL_ARB_copy_buffer;
	public final boolean GL_ARB_copy_image;
	public final boolean GL_ARB_debug_output;
	public final boolean GL_ARB_depth_buffer_float;
	public final boolean GL_ARB_depth_clamp;
	public final boolean GL_ARB_depth_texture;
	public final boolean GL_ARB_draw_buffers;
	public final boolean GL_ARB_draw_buffers_blend;
	public final boolean GL_ARB_draw_elements_base_vertex;
	public final boolean GL_ARB_draw_indirect;
	public final boolean GL_ARB_draw_instanced;
	public final boolean GL_ARB_explicit_attrib_location;
	public final boolean GL_ARB_explicit_uniform_location;
	public final boolean GL_ARB_fragment_coord_conventions;
	public final boolean GL_ARB_fragment_layer_viewport;
	public final boolean GL_ARB_fragment_program;
	public final boolean GL_ARB_fragment_program_shadow;
	public final boolean GL_ARB_fragment_shader;
	public final boolean GL_ARB_framebuffer_no_attachments;
	public final boolean GL_ARB_framebuffer_object;
	public final boolean GL_ARB_framebuffer_sRGB;
	public final boolean GL_ARB_geometry_shader4;
	public final boolean GL_ARB_get_program_binary;
	public final boolean GL_ARB_gpu_shader5;
	public final boolean GL_ARB_gpu_shader_fp64;
	public final boolean GL_ARB_half_float_pixel;
	public final boolean GL_ARB_half_float_vertex;
	public final boolean GL_ARB_imaging;
	public final boolean GL_ARB_instanced_arrays;
	public final boolean GL_ARB_internalformat_query;
	public final boolean GL_ARB_internalformat_query2;
	public final boolean GL_ARB_invalidate_subdata;
	public final boolean GL_ARB_map_buffer_alignment;
	public final boolean GL_ARB_map_buffer_range;
	public final boolean GL_ARB_matrix_palette;
	public final boolean GL_ARB_multi_draw_indirect;
	public final boolean GL_ARB_multisample;
	public final boolean GL_ARB_multitexture;
	public final boolean GL_ARB_occlusion_query;
	public final boolean GL_ARB_occlusion_query2;
	public final boolean GL_ARB_pixel_buffer_object;
	public final boolean GL_ARB_point_parameters;
	public final boolean GL_ARB_point_sprite;
	public final boolean GL_ARB_program_interface_query;
	public final boolean GL_ARB_provoking_vertex;
	public final boolean GL_ARB_robust_buffer_access_behavior;
	public final boolean GL_ARB_robustness;
	public final boolean GL_ARB_robustness_isolation;
	public final boolean GL_ARB_sample_shading;
	public final boolean GL_ARB_sampler_objects;
	public final boolean GL_ARB_seamless_cube_map;
	public final boolean GL_ARB_separate_shader_objects;
	public final boolean GL_ARB_shader_atomic_counters;
	public final boolean GL_ARB_shader_bit_encoding;
	public final boolean GL_ARB_shader_image_load_store;
	public final boolean GL_ARB_shader_image_size;
	public final boolean GL_ARB_shader_objects;
	public final boolean GL_ARB_shader_precision;
	public final boolean GL_ARB_shader_stencil_export;
	public final boolean GL_ARB_shader_storage_buffer_object;
	public final boolean GL_ARB_shader_subroutine;
	public final boolean GL_ARB_shader_texture_lod;
	public final boolean GL_ARB_shading_language_100;
	public final boolean GL_ARB_shading_language_420pack;
	public final boolean GL_ARB_shading_language_include;
	public final boolean GL_ARB_shading_language_packing;
	public final boolean GL_ARB_shadow;
	public final boolean GL_ARB_shadow_ambient;
	public final boolean GL_ARB_stencil_texturing;
	public final boolean GL_ARB_sync;
	public final boolean GL_ARB_tessellation_shader;
	public final boolean GL_ARB_texture_border_clamp;
	public final boolean GL_ARB_texture_buffer_object;
	public final boolean GL_ARB_texture_buffer_object_rgb32;
	public final boolean GL_ARB_texture_buffer_range;
	public final boolean GL_ARB_texture_compression;
	public final boolean GL_ARB_texture_compression_bptc;
	public final boolean GL_ARB_texture_compression_rgtc;
	public final boolean GL_ARB_texture_cube_map;
	public final boolean GL_ARB_texture_cube_map_array;
	public final boolean GL_ARB_texture_env_add;
	public final boolean GL_ARB_texture_env_combine;
	public final boolean GL_ARB_texture_env_crossbar;
	public final boolean GL_ARB_texture_env_dot3;
	public final boolean GL_ARB_texture_float;
	public final boolean GL_ARB_texture_gather;
	public final boolean GL_ARB_texture_mirrored_repeat;
	public final boolean GL_ARB_texture_multisample;
	public final boolean GL_ARB_texture_non_power_of_two;
	public final boolean GL_ARB_texture_query_levels;
	public final boolean GL_ARB_texture_query_lod;
	public final boolean GL_ARB_texture_rectangle;
	public final boolean GL_ARB_texture_rg;
	public final boolean GL_ARB_texture_rgb10_a2ui;
	public final boolean GL_ARB_texture_storage;
	public final boolean GL_ARB_texture_storage_multisample;
	public final boolean GL_ARB_texture_swizzle;
	public final boolean GL_ARB_texture_view;
	public final boolean GL_ARB_timer_query;
	public final boolean GL_ARB_transform_feedback2;
	public final boolean GL_ARB_transform_feedback3;
	public final boolean GL_ARB_transform_feedback_instanced;
	public final boolean GL_ARB_transpose_matrix;
	public final boolean GL_ARB_uniform_buffer_object;
	public final boolean GL_ARB_vertex_array_bgra;
	public final boolean GL_ARB_vertex_array_object;
	public final boolean GL_ARB_vertex_attrib_64bit;
	public final boolean GL_ARB_vertex_attrib_binding;
	public final boolean GL_ARB_vertex_blend;
	public final boolean GL_ARB_vertex_buffer_object;
	public final boolean GL_ARB_vertex_program;
	public final boolean GL_ARB_vertex_shader;
	public final boolean GL_ARB_vertex_type_2_10_10_10_rev;
	public final boolean GL_ARB_viewport_array;
	public final boolean GL_ARB_window_pos;
	public final boolean GL_ATI_draw_buffers;
	public final boolean GL_ATI_element_array;
	public final boolean GL_ATI_envmap_bumpmap;
	public final boolean GL_ATI_fragment_shader;
	public final boolean GL_ATI_map_object_buffer;
	public final boolean GL_ATI_meminfo;
	public final boolean GL_ATI_pn_triangles;
	public final boolean GL_ATI_separate_stencil;
	public final boolean GL_ATI_shader_texture_lod;
	public final boolean GL_ATI_text_fragment_shader;
	public final boolean GL_ATI_texture_compression_3dc;
	public final boolean GL_ATI_texture_env_combine3;
	public final boolean GL_ATI_texture_float;
	public final boolean GL_ATI_texture_mirror_once;
	public final boolean GL_ATI_vertex_array_object;
	public final boolean GL_ATI_vertex_attrib_array_object;
	public final boolean GL_ATI_vertex_streams;
	public final boolean GL_EXT_abgr;
	public final boolean GL_EXT_bgra;
	public final boolean GL_EXT_bindable_uniform;
	public final boolean GL_EXT_blend_color;
	public final boolean GL_EXT_blend_equation_separate;
	public final boolean GL_EXT_blend_func_separate;
	public final boolean GL_EXT_blend_minmax;
	public final boolean GL_EXT_blend_subtract;
	public final boolean GL_EXT_Cg_shader;
	public final boolean GL_EXT_compiled_vertex_array;
	public final boolean GL_EXT_depth_bounds_test;
	public final boolean GL_EXT_direct_state_access;
	public final boolean GL_EXT_draw_buffers2;
	public final boolean GL_EXT_draw_instanced;
	public final boolean GL_EXT_draw_range_elements;
	public final boolean GL_EXT_fog_coord;
	public final boolean GL_EXT_framebuffer_blit;
	public final boolean GL_EXT_framebuffer_multisample;
	public final boolean GL_EXT_framebuffer_multisample_blit_scaled;
	public final boolean GL_EXT_framebuffer_object;
	public final boolean GL_EXT_framebuffer_sRGB;
	public final boolean GL_EXT_geometry_shader4;
	public final boolean GL_EXT_gpu_program_parameters;
	public final boolean GL_EXT_gpu_shader4;
	public final boolean GL_EXT_multi_draw_arrays;
	public final boolean GL_EXT_packed_depth_stencil;
	public final boolean GL_EXT_packed_float;
	public final boolean GL_EXT_packed_pixels;
	public final boolean GL_EXT_paletted_texture;
	public final boolean GL_EXT_pixel_buffer_object;
	public final boolean GL_EXT_point_parameters;
	public final boolean GL_EXT_provoking_vertex;
	public final boolean GL_EXT_rescale_normal;
	public final boolean GL_EXT_secondary_color;
	public final boolean GL_EXT_separate_shader_objects;
	public final boolean GL_EXT_separate_specular_color;
	public final boolean GL_EXT_shader_image_load_store;
	public final boolean GL_EXT_shadow_funcs;
	public final boolean GL_EXT_shared_texture_palette;
	public final boolean GL_EXT_stencil_clear_tag;
	public final boolean GL_EXT_stencil_two_side;
	public final boolean GL_EXT_stencil_wrap;
	public final boolean GL_EXT_texture_3d;
	public final boolean GL_EXT_texture_array;
	public final boolean GL_EXT_texture_buffer_object;
	public final boolean GL_EXT_texture_compression_latc;
	public final boolean GL_EXT_texture_compression_rgtc;
	public final boolean GL_EXT_texture_compression_s3tc;
	public final boolean GL_EXT_texture_env_combine;
	public final boolean GL_EXT_texture_env_dot3;
	public final boolean GL_EXT_texture_filter_anisotropic;
	public final boolean GL_EXT_texture_integer;
	public final boolean GL_EXT_texture_lod_bias;
	public final boolean GL_EXT_texture_mirror_clamp;
	public final boolean GL_EXT_texture_rectangle;
	public final boolean GL_EXT_texture_sRGB;
	public final boolean GL_EXT_texture_sRGB_decode;
	public final boolean GL_EXT_texture_shared_exponent;
	public final boolean GL_EXT_texture_snorm;
	public final boolean GL_EXT_texture_swizzle;
	public final boolean GL_EXT_timer_query;
	public final boolean GL_EXT_transform_feedback;
	public final boolean GL_EXT_vertex_array_bgra;
	public final boolean GL_EXT_vertex_attrib_64bit;
	public final boolean GL_EXT_vertex_shader;
	public final boolean GL_EXT_vertex_weighting;
	public final boolean OpenGL11;
	public final boolean OpenGL12;
	public final boolean OpenGL13;
	public final boolean OpenGL14;
	public final boolean OpenGL15;
	public final boolean OpenGL20;
	public final boolean OpenGL21;
	public final boolean OpenGL30;
	public final boolean OpenGL31;
	public final boolean OpenGL32;
	public final boolean OpenGL33;
	public final boolean OpenGL40;
	public final boolean OpenGL41;
	public final boolean OpenGL42;
	public final boolean OpenGL43;
	public final boolean GL_GREMEDY_frame_terminator;
	public final boolean GL_GREMEDY_string_marker;
	public final boolean GL_HP_occlusion_test;
	public final boolean GL_IBM_rasterpos_clip;
	public final boolean GL_INTEL_map_texture;
	public final boolean GL_KHR_debug;
	public final boolean GL_KHR_texture_compression_astc_ldr;
	public final boolean GL_NVX_gpu_memory_info;
	public final boolean GL_NV_bindless_texture;
	public final boolean GL_NV_blend_square;
	public final boolean GL_NV_compute_program5;
	public final boolean GL_NV_conditional_render;
	public final boolean GL_NV_copy_depth_to_color;
	public final boolean GL_NV_copy_image;
	public final boolean GL_NV_deep_texture3D;
	public final boolean GL_NV_depth_buffer_float;
	public final boolean GL_NV_depth_clamp;
	public final boolean GL_NV_draw_texture;
	public final boolean GL_NV_evaluators;
	public final boolean GL_NV_explicit_multisample;
	public final boolean GL_NV_fence;
	public final boolean GL_NV_float_buffer;
	public final boolean GL_NV_fog_distance;
	public final boolean GL_NV_fragment_program;
	public final boolean GL_NV_fragment_program2;
	public final boolean GL_NV_fragment_program4;
	public final boolean GL_NV_fragment_program_option;
	public final boolean GL_NV_framebuffer_multisample_coverage;
	public final boolean GL_NV_geometry_program4;
	public final boolean GL_NV_geometry_shader4;
	public final boolean GL_NV_gpu_program4;
	public final boolean GL_NV_gpu_program5;
	public final boolean GL_NV_gpu_shader5;
	public final boolean GL_NV_half_float;
	public final boolean GL_NV_light_max_exponent;
	public final boolean GL_NV_multisample_coverage;
	public final boolean GL_NV_multisample_filter_hint;
	public final boolean GL_NV_occlusion_query;
	public final boolean GL_NV_packed_depth_stencil;
	public final boolean GL_NV_parameter_buffer_object;
	public final boolean GL_NV_parameter_buffer_object2;
	public final boolean GL_NV_path_rendering;
	public final boolean GL_NV_pixel_data_range;
	public final boolean GL_NV_point_sprite;
	public final boolean GL_NV_present_video;
	public final boolean GL_NV_primitive_restart;
	public final boolean GL_NV_register_combiners;
	public final boolean GL_NV_register_combiners2;
	public final boolean GL_NV_shader_atomic_counters;
	public final boolean GL_NV_shader_atomic_float;
	public final boolean GL_NV_shader_buffer_load;
	public final boolean GL_NV_shader_buffer_store;
	public final boolean GL_NV_shader_storage_buffer_object;
	public final boolean GL_NV_tessellation_program5;
	public final boolean GL_NV_texgen_reflection;
	public final boolean GL_NV_texture_barrier;
	public final boolean GL_NV_texture_compression_vtc;
	public final boolean GL_NV_texture_env_combine4;
	public final boolean GL_NV_texture_expand_normal;
	public final boolean GL_NV_texture_multisample;
	public final boolean GL_NV_texture_rectangle;
	public final boolean GL_NV_texture_shader;
	public final boolean GL_NV_texture_shader2;
	public final boolean GL_NV_texture_shader3;
	public final boolean GL_NV_transform_feedback;
	public final boolean GL_NV_transform_feedback2;
	public final boolean GL_NV_vertex_array_range;
	public final boolean GL_NV_vertex_array_range2;
	public final boolean GL_NV_vertex_attrib_integer_64bit;
	public final boolean GL_NV_vertex_buffer_unified_memory;
	public final boolean GL_NV_vertex_program;
	public final boolean GL_NV_vertex_program1_1;
	public final boolean GL_NV_vertex_program2;
	public final boolean GL_NV_vertex_program2_option;
	public final boolean GL_NV_vertex_program3;
	public final boolean GL_NV_vertex_program4;
	public final boolean GL_NV_video_capture;
	public final boolean GL_SGIS_generate_mipmap;
	public final boolean GL_SGIS_texture_lod;
	public final boolean GL_SUN_slice_accum;

	// AMD_debug_output
	long glDebugMessageEnableAMD;
	long glDebugMessageInsertAMD;
	long glDebugMessageCallbackAMD;
	long glGetDebugMessageLogAMD;
	// AMD_draw_buffers_blend
	long glBlendFuncIndexedAMD;
	long glBlendFuncSeparateIndexedAMD;
	long glBlendEquationIndexedAMD;
	long glBlendEquationSeparateIndexedAMD;
	// AMD_multi_draw_indirect
	long glMultiDrawArraysIndirectAMD;
	long glMultiDrawElementsIndirectAMD;
	// AMD_name_gen_delete
	long glGenNamesAMD;
	long glDeleteNamesAMD;
	long glIsNameAMD;
	// AMD_performance_monitor
	long glGetPerfMonitorGroupsAMD;
	long glGetPerfMonitorCountersAMD;
	long glGetPerfMonitorGroupStringAMD;
	long glGetPerfMonitorCounterStringAMD;
	long glGetPerfMonitorCounterInfoAMD;
	long glGenPerfMonitorsAMD;
	long glDeletePerfMonitorsAMD;
	long glSelectPerfMonitorCountersAMD;
	long glBeginPerfMonitorAMD;
	long glEndPerfMonitorAMD;
	long glGetPerfMonitorCounterDataAMD;
	// AMD_sample_positions
	long glSetMultisamplefvAMD;
	// AMD_sparse_texture
	long glTexStorageSparseAMD;
	long glTextureStorageSparseAMD;
	// AMD_stencil_operation_extended
	long glStencilOpValueAMD;
	// AMD_vertex_shader_tessellator
	long glTessellationFactorAMD;
	long glTessellationModeAMD;
	// APPLE_element_array
	long glElementPointerAPPLE;
	long glDrawElementArrayAPPLE;
	long glDrawRangeElementArrayAPPLE;
	long glMultiDrawElementArrayAPPLE;
	long glMultiDrawRangeElementArrayAPPLE;
	// APPLE_fence
	long glGenFencesAPPLE;
	long glDeleteFencesAPPLE;
	long glSetFenceAPPLE;
	long glIsFenceAPPLE;
	long glTestFenceAPPLE;
	long glFinishFenceAPPLE;
	long glTestObjectAPPLE;
	long glFinishObjectAPPLE;
	// APPLE_flush_buffer_range
	long glBufferParameteriAPPLE;
	long glFlushMappedBufferRangeAPPLE;
	// APPLE_object_purgeable
	long glObjectPurgeableAPPLE;
	long glObjectUnpurgeableAPPLE;
	long glGetObjectParameterivAPPLE;
	// APPLE_texture_range
	long glTextureRangeAPPLE;
	long glGetTexParameterPointervAPPLE;
	// APPLE_vertex_array_object
	long glBindVertexArrayAPPLE;
	long glDeleteVertexArraysAPPLE;
	long glGenVertexArraysAPPLE;
	long glIsVertexArrayAPPLE;
	// APPLE_vertex_array_range
	long glVertexArrayRangeAPPLE;
	long glFlushVertexArrayRangeAPPLE;
	long glVertexArrayParameteriAPPLE;
	// APPLE_vertex_program_evaluators
	long glEnableVertexAttribAPPLE;
	long glDisableVertexAttribAPPLE;
	long glIsVertexAttribEnabledAPPLE;
	long glMapVertexAttrib1dAPPLE;
	long glMapVertexAttrib1fAPPLE;
	long glMapVertexAttrib2dAPPLE;
	long glMapVertexAttrib2fAPPLE;
	// ARB_buffer_object
	long glBindBufferARB;
	long glDeleteBuffersARB;
	long glGenBuffersARB;
	long glIsBufferARB;
	long glBufferDataARB;
	long glBufferSubDataARB;
	long glGetBufferSubDataARB;
	long glMapBufferARB;
	long glUnmapBufferARB;
	long glGetBufferParameterivARB;
	long glGetBufferPointervARB;
	// ARB_cl_event
	long glCreateSyncFromCLeventARB;
	// ARB_clear_buffer_object
	long glClearNamedBufferDataEXT;
	long glClearNamedBufferSubDataEXT;
	// ARB_color_buffer_float
	long glClampColorARB;
	// ARB_debug_output
	long glDebugMessageControlARB;
	long glDebugMessageInsertARB;
	long glDebugMessageCallbackARB;
	long glGetDebugMessageLogARB;
	// ARB_draw_buffers
	long glDrawBuffersARB;
	// ARB_draw_buffers_blend
	long glBlendEquationiARB;
	long glBlendEquationSeparateiARB;
	long glBlendFunciARB;
	long glBlendFuncSeparateiARB;
	// ARB_draw_instanced
	long glDrawArraysInstancedARB;
	long glDrawElementsInstancedARB;
	// ARB_framebuffer_no_attachments
	long glNamedFramebufferParameteriEXT;
	long glGetNamedFramebufferParameterivEXT;
	// ARB_geometry_shader4
	long glProgramParameteriARB;
	long glFramebufferTextureARB;
	long glFramebufferTextureLayerARB;
	long glFramebufferTextureFaceARB;
	// ARB_gpu_shader_fp64
	long glProgramUniform1dEXT;
	long glProgramUniform2dEXT;
	long glProgramUniform3dEXT;
	long glProgramUniform4dEXT;
	long glProgramUniform1dvEXT;
	long glProgramUniform2dvEXT;
	long glProgramUniform3dvEXT;
	long glProgramUniform4dvEXT;
	long glProgramUniformMatrix2dvEXT;
	long glProgramUniformMatrix3dvEXT;
	long glProgramUniformMatrix4dvEXT;
	long glProgramUniformMatrix2x3dvEXT;
	long glProgramUniformMatrix2x4dvEXT;
	long glProgramUniformMatrix3x2dvEXT;
	long glProgramUniformMatrix3x4dvEXT;
	long glProgramUniformMatrix4x2dvEXT;
	long glProgramUniformMatrix4x3dvEXT;
	// ARB_imaging
	long glColorTable;
	long glColorSubTable;
	long glColorTableParameteriv;
	long glColorTableParameterfv;
	long glCopyColorSubTable;
	long glCopyColorTable;
	long glGetColorTable;
	long glGetColorTableParameteriv;
	long glGetColorTableParameterfv;
	long glHistogram;
	long glResetHistogram;
	long glGetHistogram;
	long glGetHistogramParameterfv;
	long glGetHistogramParameteriv;
	long glMinmax;
	long glResetMinmax;
	long glGetMinmax;
	long glGetMinmaxParameterfv;
	long glGetMinmaxParameteriv;
	long glConvolutionFilter1D;
	long glConvolutionFilter2D;
	long glConvolutionParameterf;
	long glConvolutionParameterfv;
	long glConvolutionParameteri;
	long glConvolutionParameteriv;
	long glCopyConvolutionFilter1D;
	long glCopyConvolutionFilter2D;
	long glGetConvolutionFilter;
	long glGetConvolutionParameterfv;
	long glGetConvolutionParameteriv;
	long glSeparableFilter2D;
	long glGetSeparableFilter;
	// ARB_instanced_arrays
	long glVertexAttribDivisorARB;
	// ARB_matrix_palette
	long glCurrentPaletteMatrixARB;
	long glMatrixIndexPointerARB;
	long glMatrixIndexubvARB;
	long glMatrixIndexusvARB;
	long glMatrixIndexuivARB;
	// ARB_multisample
	long glSampleCoverageARB;
	// ARB_multitexture
	long glClientActiveTextureARB;
	long glActiveTextureARB;
	long glMultiTexCoord1fARB;
	long glMultiTexCoord1dARB;
	long glMultiTexCoord1iARB;
	long glMultiTexCoord1sARB;
	long glMultiTexCoord2fARB;
	long glMultiTexCoord2dARB;
	long glMultiTexCoord2iARB;
	long glMultiTexCoord2sARB;
	long glMultiTexCoord3fARB;
	long glMultiTexCoord3dARB;
	long glMultiTexCoord3iARB;
	long glMultiTexCoord3sARB;
	long glMultiTexCoord4fARB;
	long glMultiTexCoord4dARB;
	long glMultiTexCoord4iARB;
	long glMultiTexCoord4sARB;
	// ARB_occlusion_query
	long glGenQueriesARB;
	long glDeleteQueriesARB;
	long glIsQueryARB;
	long glBeginQueryARB;
	long glEndQueryARB;
	long glGetQueryivARB;
	long glGetQueryObjectivARB;
	long glGetQueryObjectuivARB;
	// ARB_point_parameters
	long glPointParameterfARB;
	long glPointParameterfvARB;
	// ARB_program
	long glProgramStringARB;
	long glBindProgramARB;
	long glDeleteProgramsARB;
	long glGenProgramsARB;
	long glProgramEnvParameter4fARB;
	long glProgramEnvParameter4dARB;
	long glProgramEnvParameter4fvARB;
	long glProgramEnvParameter4dvARB;
	long glProgramLocalParameter4fARB;
	long glProgramLocalParameter4dARB;
	long glProgramLocalParameter4fvARB;
	long glProgramLocalParameter4dvARB;
	long glGetProgramEnvParameterfvARB;
	long glGetProgramEnvParameterdvARB;
	long glGetProgramLocalParameterfvARB;
	long glGetProgramLocalParameterdvARB;
	long glGetProgramivARB;
	long glGetProgramStringARB;
	long glIsProgramARB;
	// ARB_robustness
	long glGetGraphicsResetStatusARB;
	long glGetnMapdvARB;
	long glGetnMapfvARB;
	long glGetnMapivARB;
	long glGetnPixelMapfvARB;
	long glGetnPixelMapuivARB;
	long glGetnPixelMapusvARB;
	long glGetnPolygonStippleARB;
	long glGetnTexImageARB;
	long glReadnPixelsARB;
	long glGetnColorTableARB;
	long glGetnConvolutionFilterARB;
	long glGetnSeparableFilterARB;
	long glGetnHistogramARB;
	long glGetnMinmaxARB;
	long glGetnCompressedTexImageARB;
	long glGetnUniformfvARB;
	long glGetnUniformivARB;
	long glGetnUniformuivARB;
	long glGetnUniformdvARB;
	// ARB_sample_shading
	long glMinSampleShadingARB;
	// ARB_shader_objects
	long glDeleteObjectARB;
	long glGetHandleARB;
	long glDetachObjectARB;
	long glCreateShaderObjectARB;
	long glShaderSourceARB;
	long glCompileShaderARB;
	long glCreateProgramObjectARB;
	long glAttachObjectARB;
	long glLinkProgramARB;
	long glUseProgramObjectARB;
	long glValidateProgramARB;
	long glUniform1fARB;
	long glUniform2fARB;
	long glUniform3fARB;
	long glUniform4fARB;
	long glUniform1iARB;
	long glUniform2iARB;
	long glUniform3iARB;
	long glUniform4iARB;
	long glUniform1fvARB;
	long glUniform2fvARB;
	long glUniform3fvARB;
	long glUniform4fvARB;
	long glUniform1ivARB;
	long glUniform2ivARB;
	long glUniform3ivARB;
	long glUniform4ivARB;
	long glUniformMatrix2fvARB;
	long glUniformMatrix3fvARB;
	long glUniformMatrix4fvARB;
	long glGetObjectParameterfvARB;
	long glGetObjectParameterivARB;
	long glGetInfoLogARB;
	long glGetAttachedObjectsARB;
	long glGetUniformLocationARB;
	long glGetActiveUniformARB;
	long glGetUniformfvARB;
	long glGetUniformivARB;
	long glGetShaderSourceARB;
	// ARB_shading_language_include
	long glNamedStringARB;
	long glDeleteNamedStringARB;
	long glCompileShaderIncludeARB;
	long glIsNamedStringARB;
	long glGetNamedStringARB;
	long glGetNamedStringivARB;
	// ARB_texture_buffer_object
	long glTexBufferARB;
	// ARB_texture_buffer_range
	long glTextureBufferRangeEXT;
	// ARB_texture_compression
	long glCompressedTexImage1DARB;
	long glCompressedTexImage2DARB;
	long glCompressedTexImage3DARB;
	long glCompressedTexSubImage1DARB;
	long glCompressedTexSubImage2DARB;
	long glCompressedTexSubImage3DARB;
	long glGetCompressedTexImageARB;
	// ARB_texture_storage
	long glTextureStorage1DEXT;
	long glTextureStorage2DEXT;
	long glTextureStorage3DEXT;
	// ARB_texture_storage_multisample
	long glTextureStorage2DMultisampleEXT;
	long glTextureStorage3DMultisampleEXT;
	// ARB_transpose_matrix
	long glLoadTransposeMatrixfARB;
	long glMultTransposeMatrixfARB;
	// ARB_vertex_attrib_64bit
	long glVertexArrayVertexAttribLOffsetEXT;
	// ARB_vertex_blend
	long glWeightbvARB;
	long glWeightsvARB;
	long glWeightivARB;
	long glWeightfvARB;
	long glWeightdvARB;
	long glWeightubvARB;
	long glWeightusvARB;
	long glWeightuivARB;
	long glWeightPointerARB;
	long glVertexBlendARB;
	// ARB_vertex_shader
	long glVertexAttrib1sARB;
	long glVertexAttrib1fARB;
	long glVertexAttrib1dARB;
	long glVertexAttrib2sARB;
	long glVertexAttrib2fARB;
	long glVertexAttrib2dARB;
	long glVertexAttrib3sARB;
	long glVertexAttrib3fARB;
	long glVertexAttrib3dARB;
	long glVertexAttrib4sARB;
	long glVertexAttrib4fARB;
	long glVertexAttrib4dARB;
	long glVertexAttrib4NubARB;
	long glVertexAttribPointerARB;
	long glEnableVertexAttribArrayARB;
	long glDisableVertexAttribArrayARB;
	long glBindAttribLocationARB;
	long glGetActiveAttribARB;
	long glGetAttribLocationARB;
	long glGetVertexAttribfvARB;
	long glGetVertexAttribdvARB;
	long glGetVertexAttribivARB;
	long glGetVertexAttribPointervARB;
	// ARB_window_pos
	long glWindowPos2fARB;
	long glWindowPos2dARB;
	long glWindowPos2iARB;
	long glWindowPos2sARB;
	long glWindowPos3fARB;
	long glWindowPos3dARB;
	long glWindowPos3iARB;
	long glWindowPos3sARB;
	// ATI_draw_buffers
	long glDrawBuffersATI;
	// ATI_element_array
	long glElementPointerATI;
	long glDrawElementArrayATI;
	long glDrawRangeElementArrayATI;
	// ATI_envmap_bumpmap
	long glTexBumpParameterfvATI;
	long glTexBumpParameterivATI;
	long glGetTexBumpParameterfvATI;
	long glGetTexBumpParameterivATI;
	// ATI_fragment_shader
	long glGenFragmentShadersATI;
	long glBindFragmentShaderATI;
	long glDeleteFragmentShaderATI;
	long glBeginFragmentShaderATI;
	long glEndFragmentShaderATI;
	long glPassTexCoordATI;
	long glSampleMapATI;
	long glColorFragmentOp1ATI;
	long glColorFragmentOp2ATI;
	long glColorFragmentOp3ATI;
	long glAlphaFragmentOp1ATI;
	long glAlphaFragmentOp2ATI;
	long glAlphaFragmentOp3ATI;
	long glSetFragmentShaderConstantATI;
	// ATI_map_object_buffer
	long glMapObjectBufferATI;
	long glUnmapObjectBufferATI;
	// ATI_pn_triangles
	long glPNTrianglesfATI;
	long glPNTrianglesiATI;
	// ATI_separate_stencil
	long glStencilOpSeparateATI;
	long glStencilFuncSeparateATI;
	// ATI_vertex_array_object
	long glNewObjectBufferATI;
	long glIsObjectBufferATI;
	long glUpdateObjectBufferATI;
	long glGetObjectBufferfvATI;
	long glGetObjectBufferivATI;
	long glFreeObjectBufferATI;
	long glArrayObjectATI;
	long glGetArrayObjectfvATI;
	long glGetArrayObjectivATI;
	long glVariantArrayObjectATI;
	long glGetVariantArrayObjectfvATI;
	long glGetVariantArrayObjectivATI;
	// ATI_vertex_attrib_array_object
	long glVertexAttribArrayObjectATI;
	long glGetVertexAttribArrayObjectfvATI;
	long glGetVertexAttribArrayObjectivATI;
	// ATI_vertex_streams
	long glVertexStream2fATI;
	long glVertexStream2dATI;
	long glVertexStream2iATI;
	long glVertexStream2sATI;
	long glVertexStream3fATI;
	long glVertexStream3dATI;
	long glVertexStream3iATI;
	long glVertexStream3sATI;
	long glVertexStream4fATI;
	long glVertexStream4dATI;
	long glVertexStream4iATI;
	long glVertexStream4sATI;
	long glNormalStream3bATI;
	long glNormalStream3fATI;
	long glNormalStream3dATI;
	long glNormalStream3iATI;
	long glNormalStream3sATI;
	long glClientActiveVertexStreamATI;
	long glVertexBlendEnvfATI;
	long glVertexBlendEnviATI;
	// EXT_bindable_uniform
	long glUniformBufferEXT;
	long glGetUniformBufferSizeEXT;
	long glGetUniformOffsetEXT;
	// EXT_blend_color
	long glBlendColorEXT;
	// EXT_blend_equation_separate
	long glBlendEquationSeparateEXT;
	// EXT_blend_func_separate
	long glBlendFuncSeparateEXT;
	// EXT_blend_minmax
	long glBlendEquationEXT;
	// EXT_compiled_vertex_array
	long glLockArraysEXT;
	long glUnlockArraysEXT;
	// EXT_depth_bounds_test
	long glDepthBoundsEXT;
	// EXT_direct_state_access
	long glClientAttribDefaultEXT;
	long glPushClientAttribDefaultEXT;
	long glMatrixLoadfEXT;
	long glMatrixLoaddEXT;
	long glMatrixMultfEXT;
	long glMatrixMultdEXT;
	long glMatrixLoadIdentityEXT;
	long glMatrixRotatefEXT;
	long glMatrixRotatedEXT;
	long glMatrixScalefEXT;
	long glMatrixScaledEXT;
	long glMatrixTranslatefEXT;
	long glMatrixTranslatedEXT;
	long glMatrixOrthoEXT;
	long glMatrixFrustumEXT;
	long glMatrixPushEXT;
	long glMatrixPopEXT;
	long glTextureParameteriEXT;
	long glTextureParameterivEXT;
	long glTextureParameterfEXT;
	long glTextureParameterfvEXT;
	long glTextureImage1DEXT;
	long glTextureImage2DEXT;
	long glTextureSubImage1DEXT;
	long glTextureSubImage2DEXT;
	long glCopyTextureImage1DEXT;
	long glCopyTextureImage2DEXT;
	long glCopyTextureSubImage1DEXT;
	long glCopyTextureSubImage2DEXT;
	long glGetTextureImageEXT;
	long glGetTextureParameterfvEXT;
	long glGetTextureParameterivEXT;
	long glGetTextureLevelParameterfvEXT;
	long glGetTextureLevelParameterivEXT;
	long glTextureImage3DEXT;
	long glTextureSubImage3DEXT;
	long glCopyTextureSubImage3DEXT;
	long glBindMultiTextureEXT;
	long glMultiTexCoordPointerEXT;
	long glMultiTexEnvfEXT;
	long glMultiTexEnvfvEXT;
	long glMultiTexEnviEXT;
	long glMultiTexEnvivEXT;
	long glMultiTexGendEXT;
	long glMultiTexGendvEXT;
	long glMultiTexGenfEXT;
	long glMultiTexGenfvEXT;
	long glMultiTexGeniEXT;
	long glMultiTexGenivEXT;
	long glGetMultiTexEnvfvEXT;
	long glGetMultiTexEnvivEXT;
	long glGetMultiTexGendvEXT;
	long glGetMultiTexGenfvEXT;
	long glGetMultiTexGenivEXT;
	long glMultiTexParameteriEXT;
	long glMultiTexParameterivEXT;
	long glMultiTexParameterfEXT;
	long glMultiTexParameterfvEXT;
	long glMultiTexImage1DEXT;
	long glMultiTexImage2DEXT;
	long glMultiTexSubImage1DEXT;
	long glMultiTexSubImage2DEXT;
	long glCopyMultiTexImage1DEXT;
	long glCopyMultiTexImage2DEXT;
	long glCopyMultiTexSubImage1DEXT;
	long glCopyMultiTexSubImage2DEXT;
	long glGetMultiTexImageEXT;
	long glGetMultiTexParameterfvEXT;
	long glGetMultiTexParameterivEXT;
	long glGetMultiTexLevelParameterfvEXT;
	long glGetMultiTexLevelParameterivEXT;
	long glMultiTexImage3DEXT;
	long glMultiTexSubImage3DEXT;
	long glCopyMultiTexSubImage3DEXT;
	long glEnableClientStateIndexedEXT;
	long glDisableClientStateIndexedEXT;
	long glEnableClientStateiEXT;
	long glDisableClientStateiEXT;
	long glGetFloatIndexedvEXT;
	long glGetDoubleIndexedvEXT;
	long glGetPointerIndexedvEXT;
	long glGetFloati_vEXT;
	long glGetDoublei_vEXT;
	long glGetPointeri_vEXT;
	long glNamedProgramStringEXT;
	long glNamedProgramLocalParameter4dEXT;
	long glNamedProgramLocalParameter4dvEXT;
	long glNamedProgramLocalParameter4fEXT;
	long glNamedProgramLocalParameter4fvEXT;
	long glGetNamedProgramLocalParameterdvEXT;
	long glGetNamedProgramLocalParameterfvEXT;
	long glGetNamedProgramivEXT;
	long glGetNamedProgramStringEXT;
	long glCompressedTextureImage3DEXT;
	long glCompressedTextureImage2DEXT;
	long glCompressedTextureImage1DEXT;
	long glCompressedTextureSubImage3DEXT;
	long glCompressedTextureSubImage2DEXT;
	long glCompressedTextureSubImage1DEXT;
	long glGetCompressedTextureImageEXT;
	long glCompressedMultiTexImage3DEXT;
	long glCompressedMultiTexImage2DEXT;
	long glCompressedMultiTexImage1DEXT;
	long glCompressedMultiTexSubImage3DEXT;
	long glCompressedMultiTexSubImage2DEXT;
	long glCompressedMultiTexSubImage1DEXT;
	long glGetCompressedMultiTexImageEXT;
	long glMatrixLoadTransposefEXT;
	long glMatrixLoadTransposedEXT;
	long glMatrixMultTransposefEXT;
	long glMatrixMultTransposedEXT;
	long glNamedBufferDataEXT;
	long glNamedBufferSubDataEXT;
	long glMapNamedBufferEXT;
	long glUnmapNamedBufferEXT;
	long glGetNamedBufferParameterivEXT;
	long glGetNamedBufferPointervEXT;
	long glGetNamedBufferSubDataEXT;
	long glProgramUniform1fEXT;
	long glProgramUniform2fEXT;
	long glProgramUniform3fEXT;
	long glProgramUniform4fEXT;
	long glProgramUniform1iEXT;
	long glProgramUniform2iEXT;
	long glProgramUniform3iEXT;
	long glProgramUniform4iEXT;
	long glProgramUniform1fvEXT;
	long glProgramUniform2fvEXT;
	long glProgramUniform3fvEXT;
	long glProgramUniform4fvEXT;
	long glProgramUniform1ivEXT;
	long glProgramUniform2ivEXT;
	long glProgramUniform3ivEXT;
	long glProgramUniform4ivEXT;
	long glProgramUniformMatrix2fvEXT;
	long glProgramUniformMatrix3fvEXT;
	long glProgramUniformMatrix4fvEXT;
	long glProgramUniformMatrix2x3fvEXT;
	long glProgramUniformMatrix3x2fvEXT;
	long glProgramUniformMatrix2x4fvEXT;
	long glProgramUniformMatrix4x2fvEXT;
	long glProgramUniformMatrix3x4fvEXT;
	long glProgramUniformMatrix4x3fvEXT;
	long glTextureBufferEXT;
	long glMultiTexBufferEXT;
	long glTextureParameterIivEXT;
	long glTextureParameterIuivEXT;
	long glGetTextureParameterIivEXT;
	long glGetTextureParameterIuivEXT;
	long glMultiTexParameterIivEXT;
	long glMultiTexParameterIuivEXT;
	long glGetMultiTexParameterIivEXT;
	long glGetMultiTexParameterIuivEXT;
	long glProgramUniform1uiEXT;
	long glProgramUniform2uiEXT;
	long glProgramUniform3uiEXT;
	long glProgramUniform4uiEXT;
	long glProgramUniform1uivEXT;
	long glProgramUniform2uivEXT;
	long glProgramUniform3uivEXT;
	long glProgramUniform4uivEXT;
	long glNamedProgramLocalParameters4fvEXT;
	long glNamedProgramLocalParameterI4iEXT;
	long glNamedProgramLocalParameterI4ivEXT;
	long glNamedProgramLocalParametersI4ivEXT;
	long glNamedProgramLocalParameterI4uiEXT;
	long glNamedProgramLocalParameterI4uivEXT;
	long glNamedProgramLocalParametersI4uivEXT;
	long glGetNamedProgramLocalParameterIivEXT;
	long glGetNamedProgramLocalParameterIuivEXT;
	long glNamedRenderbufferStorageEXT;
	long glGetNamedRenderbufferParameterivEXT;
	long glNamedRenderbufferStorageMultisampleEXT;
	long glNamedRenderbufferStorageMultisampleCoverageEXT;
	long glCheckNamedFramebufferStatusEXT;
	long glNamedFramebufferTexture1DEXT;
	long glNamedFramebufferTexture2DEXT;
	long glNamedFramebufferTexture3DEXT;
	long glNamedFramebufferRenderbufferEXT;
	long glGetNamedFramebufferAttachmentParameterivEXT;
	long glGenerateTextureMipmapEXT;
	long glGenerateMultiTexMipmapEXT;
	long glFramebufferDrawBufferEXT;
	long glFramebufferDrawBuffersEXT;
	long glFramebufferReadBufferEXT;
	long glGetFramebufferParameterivEXT;
	long glNamedCopyBufferSubDataEXT;
	long glNamedFramebufferTextureEXT;
	long glNamedFramebufferTextureLayerEXT;
	long glNamedFramebufferTextureFaceEXT;
	long glTextureRenderbufferEXT;
	long glMultiTexRenderbufferEXT;
	long glVertexArrayVertexOffsetEXT;
	long glVertexArrayColorOffsetEXT;
	long glVertexArrayEdgeFlagOffsetEXT;
	long glVertexArrayIndexOffsetEXT;
	long glVertexArrayNormalOffsetEXT;
	long glVertexArrayTexCoordOffsetEXT;
	long glVertexArrayMultiTexCoordOffsetEXT;
	long glVertexArrayFogCoordOffsetEXT;
	long glVertexArraySecondaryColorOffsetEXT;
	long glVertexArrayVertexAttribOffsetEXT;
	long glVertexArrayVertexAttribIOffsetEXT;
	long glEnableVertexArrayEXT;
	long glDisableVertexArrayEXT;
	long glEnableVertexArrayAttribEXT;
	long glDisableVertexArrayAttribEXT;
	long glGetVertexArrayIntegervEXT;
	long glGetVertexArrayPointervEXT;
	long glGetVertexArrayIntegeri_vEXT;
	long glGetVertexArrayPointeri_vEXT;
	long glMapNamedBufferRangeEXT;
	long glFlushMappedNamedBufferRangeEXT;
	// EXT_draw_buffers2
	long glColorMaskIndexedEXT;
	long glGetBooleanIndexedvEXT;
	long glGetIntegerIndexedvEXT;
	long glEnableIndexedEXT;
	long glDisableIndexedEXT;
	long glIsEnabledIndexedEXT;
	// EXT_draw_instanced
	long glDrawArraysInstancedEXT;
	long glDrawElementsInstancedEXT;
	// EXT_draw_range_elements
	long glDrawRangeElementsEXT;
	// EXT_fog_coord
	long glFogCoordfEXT;
	long glFogCoorddEXT;
	long glFogCoordPointerEXT;
	// EXT_framebuffer_blit
	long glBlitFramebufferEXT;
	// EXT_framebuffer_multisample
	long glRenderbufferStorageMultisampleEXT;
	// EXT_framebuffer_object
	long glIsRenderbufferEXT;
	long glBindRenderbufferEXT;
	long glDeleteRenderbuffersEXT;
	long glGenRenderbuffersEXT;
	long glRenderbufferStorageEXT;
	long glGetRenderbufferParameterivEXT;
	long glIsFramebufferEXT;
	long glBindFramebufferEXT;
	long glDeleteFramebuffersEXT;
	long glGenFramebuffersEXT;
	long glCheckFramebufferStatusEXT;
	long glFramebufferTexture1DEXT;
	long glFramebufferTexture2DEXT;
	long glFramebufferTexture3DEXT;
	long glFramebufferRenderbufferEXT;
	long glGetFramebufferAttachmentParameterivEXT;
	long glGenerateMipmapEXT;
	// EXT_geometry_shader4
	long glProgramParameteriEXT;
	long glFramebufferTextureEXT;
	long glFramebufferTextureLayerEXT;
	long glFramebufferTextureFaceEXT;
	// EXT_gpu_program_parameters
	long glProgramEnvParameters4fvEXT;
	long glProgramLocalParameters4fvEXT;
	// EXT_gpu_shader4
	long glVertexAttribI1iEXT;
	long glVertexAttribI2iEXT;
	long glVertexAttribI3iEXT;
	long glVertexAttribI4iEXT;
	long glVertexAttribI1uiEXT;
	long glVertexAttribI2uiEXT;
	long glVertexAttribI3uiEXT;
	long glVertexAttribI4uiEXT;
	long glVertexAttribI1ivEXT;
	long glVertexAttribI2ivEXT;
	long glVertexAttribI3ivEXT;
	long glVertexAttribI4ivEXT;
	long glVertexAttribI1uivEXT;
	long glVertexAttribI2uivEXT;
	long glVertexAttribI3uivEXT;
	long glVertexAttribI4uivEXT;
	long glVertexAttribI4bvEXT;
	long glVertexAttribI4svEXT;
	long glVertexAttribI4ubvEXT;
	long glVertexAttribI4usvEXT;
	long glVertexAttribIPointerEXT;
	long glGetVertexAttribIivEXT;
	long glGetVertexAttribIuivEXT;
	long glUniform1uiEXT;
	long glUniform2uiEXT;
	long glUniform3uiEXT;
	long glUniform4uiEXT;
	long glUniform1uivEXT;
	long glUniform2uivEXT;
	long glUniform3uivEXT;
	long glUniform4uivEXT;
	long glGetUniformuivEXT;
	long glBindFragDataLocationEXT;
	long glGetFragDataLocationEXT;
	// EXT_multi_draw_arrays
	long glMultiDrawArraysEXT;
	// EXT_paletted_texture
	long glColorTableEXT;
	long glColorSubTableEXT;
	long glGetColorTableEXT;
	long glGetColorTableParameterivEXT;
	long glGetColorTableParameterfvEXT;
	// EXT_point_parameters
	long glPointParameterfEXT;
	long glPointParameterfvEXT;
	// EXT_provoking_vertex
	long glProvokingVertexEXT;
	// EXT_secondary_color
	long glSecondaryColor3bEXT;
	long glSecondaryColor3fEXT;
	long glSecondaryColor3dEXT;
	long glSecondaryColor3ubEXT;
	long glSecondaryColorPointerEXT;
	// EXT_separate_shader_objects
	long glUseShaderProgramEXT;
	long glActiveProgramEXT;
	long glCreateShaderProgramEXT;
	// EXT_shader_image_load_store
	long glBindImageTextureEXT;
	long glMemoryBarrierEXT;
	// EXT_stencil_clear_tag
	long glStencilClearTagEXT;
	// EXT_stencil_two_side
	long glActiveStencilFaceEXT;
	// EXT_texture_buffer_object
	long glTexBufferEXT;
	// EXT_texture_integer
	long glClearColorIiEXT;
	long glClearColorIuiEXT;
	long glTexParameterIivEXT;
	long glTexParameterIuivEXT;
	long glGetTexParameterIivEXT;
	long glGetTexParameterIuivEXT;
	// EXT_timer_query
	long glGetQueryObjecti64vEXT;
	long glGetQueryObjectui64vEXT;
	// EXT_transform_feedback
	long glBindBufferRangeEXT;
	long glBindBufferOffsetEXT;
	long glBindBufferBaseEXT;
	long glBeginTransformFeedbackEXT;
	long glEndTransformFeedbackEXT;
	long glTransformFeedbackVaryingsEXT;
	long glGetTransformFeedbackVaryingEXT;
	// EXT_vertex_attrib_64bit
	long glVertexAttribL1dEXT;
	long glVertexAttribL2dEXT;
	long glVertexAttribL3dEXT;
	long glVertexAttribL4dEXT;
	long glVertexAttribL1dvEXT;
	long glVertexAttribL2dvEXT;
	long glVertexAttribL3dvEXT;
	long glVertexAttribL4dvEXT;
	long glVertexAttribLPointerEXT;
	long glGetVertexAttribLdvEXT;
	// EXT_vertex_shader
	long glBeginVertexShaderEXT;
	long glEndVertexShaderEXT;
	long glBindVertexShaderEXT;
	long glGenVertexShadersEXT;
	long glDeleteVertexShaderEXT;
	long glShaderOp1EXT;
	long glShaderOp2EXT;
	long glShaderOp3EXT;
	long glSwizzleEXT;
	long glWriteMaskEXT;
	long glInsertComponentEXT;
	long glExtractComponentEXT;
	long glGenSymbolsEXT;
	long glSetInvariantEXT;
	long glSetLocalConstantEXT;
	long glVariantbvEXT;
	long glVariantsvEXT;
	long glVariantivEXT;
	long glVariantfvEXT;
	long glVariantdvEXT;
	long glVariantubvEXT;
	long glVariantusvEXT;
	long glVariantuivEXT;
	long glVariantPointerEXT;
	long glEnableVariantClientStateEXT;
	long glDisableVariantClientStateEXT;
	long glBindLightParameterEXT;
	long glBindMaterialParameterEXT;
	long glBindTexGenParameterEXT;
	long glBindTextureUnitParameterEXT;
	long glBindParameterEXT;
	long glIsVariantEnabledEXT;
	long glGetVariantBooleanvEXT;
	long glGetVariantIntegervEXT;
	long glGetVariantFloatvEXT;
	long glGetVariantPointervEXT;
	long glGetInvariantBooleanvEXT;
	long glGetInvariantIntegervEXT;
	long glGetInvariantFloatvEXT;
	long glGetLocalConstantBooleanvEXT;
	long glGetLocalConstantIntegervEXT;
	long glGetLocalConstantFloatvEXT;
	// EXT_vertex_weighting
	long glVertexWeightfEXT;
	long glVertexWeightPointerEXT;
	// GL11
	long glAccum;
	long glAlphaFunc;
	long glClearColor;
	long glClearAccum;
	long glClear;
	long glCallLists;
	long glCallList;
	long glBlendFunc;
	long glBitmap;
	long glBindTexture;
	long glPrioritizeTextures;
	long glAreTexturesResident;
	long glBegin;
	long glEnd;
	long glArrayElement;
	long glClearDepth;
	long glDeleteLists;
	long glDeleteTextures;
	long glCullFace;
	long glCopyTexSubImage2D;
	long glCopyTexSubImage1D;
	long glCopyTexImage2D;
	long glCopyTexImage1D;
	long glCopyPixels;
	long glColorPointer;
	long glColorMaterial;
	long glColorMask;
	long glColor3b;
	long glColor3f;
	long glColor3d;
	long glColor3ub;
	long glColor4b;
	long glColor4f;
	long glColor4d;
	long glColor4ub;
	long glClipPlane;
	long glClearStencil;
	long glEvalPoint1;
	long glEvalPoint2;
	long glEvalMesh1;
	long glEvalMesh2;
	long glEvalCoord1f;
	long glEvalCoord1d;
	long glEvalCoord2f;
	long glEvalCoord2d;
	long glEnableClientState;
	long glDisableClientState;
	long glEnable;
	long glDisable;
	long glEdgeFlagPointer;
	long glEdgeFlag;
	long glDrawPixels;
	long glDrawElements;
	long glDrawBuffer;
	long glDrawArrays;
	long glDepthRange;
	long glDepthMask;
	long glDepthFunc;
	long glFeedbackBuffer;
	long glGetPixelMapfv;
	long glGetPixelMapuiv;
	long glGetPixelMapusv;
	long glGetMaterialfv;
	long glGetMaterialiv;
	long glGetMapfv;
	long glGetMapdv;
	long glGetMapiv;
	long glGetLightfv;
	long glGetLightiv;
	long glGetError;
	long glGetClipPlane;
	long glGetBooleanv;
	long glGetDoublev;
	long glGetFloatv;
	long glGetIntegerv;
	long glGenTextures;
	long glGenLists;
	long glFrustum;
	long glFrontFace;
	long glFogf;
	long glFogi;
	long glFogfv;
	long glFogiv;
	long glFlush;
	long glFinish;
	long glGetPointerv;
	long glIsEnabled;
	long glInterleavedArrays;
	long glInitNames;
	long glHint;
	long glGetTexParameterfv;
	long glGetTexParameteriv;
	long glGetTexLevelParameterfv;
	long glGetTexLevelParameteriv;
	long glGetTexImage;
	long glGetTexGeniv;
	long glGetTexGenfv;
	long glGetTexGendv;
	long glGetTexEnviv;
	long glGetTexEnvfv;
	long glGetString;
	long glGetPolygonStipple;
	long glIsList;
	long glMaterialf;
	long glMateriali;
	long glMaterialfv;
	long glMaterialiv;
	long glMapGrid1f;
	long glMapGrid1d;
	long glMapGrid2f;
	long glMapGrid2d;
	long glMap2f;
	long glMap2d;
	long glMap1f;
	long glMap1d;
	long glLogicOp;
	long glLoadName;
	long glLoadMatrixf;
	long glLoadMatrixd;
	long glLoadIdentity;
	long glListBase;
	long glLineWidth;
	long glLineStipple;
	long glLightModelf;
	long glLightModeli;
	long glLightModelfv;
	long glLightModeliv;
	long glLightf;
	long glLighti;
	long glLightfv;
	long glLightiv;
	long glIsTexture;
	long glMatrixMode;
	long glPolygonStipple;
	long glPolygonOffset;
	long glPolygonMode;
	long glPointSize;
	long glPixelZoom;
	long glPixelTransferf;
	long glPixelTransferi;
	long glPixelStoref;
	long glPixelStorei;
	long glPixelMapfv;
	long glPixelMapuiv;
	long glPixelMapusv;
	long glPassThrough;
	long glOrtho;
	long glNormalPointer;
	long glNormal3b;
	long glNormal3f;
	long glNormal3d;
	long glNormal3i;
	long glNewList;
	long glEndList;
	long glMultMatrixf;
	long glMultMatrixd;
	long glShadeModel;
	long glSelectBuffer;
	long glScissor;
	long glScalef;
	long glScaled;
	long glRotatef;
	long glRotated;
	long glRenderMode;
	long glRectf;
	long glRectd;
	long glRecti;
	long glReadPixels;
	long glReadBuffer;
	long glRasterPos2f;
	long glRasterPos2d;
	long glRasterPos2i;
	long glRasterPos3f;
	long glRasterPos3d;
	long glRasterPos3i;
	long glRasterPos4f;
	long glRasterPos4d;
	long glRasterPos4i;
	long glPushName;
	long glPopName;
	long glPushMatrix;
	long glPopMatrix;
	long glPushClientAttrib;
	long glPopClientAttrib;
	long glPushAttrib;
	long glPopAttrib;
	long glStencilFunc;
	long glVertexPointer;
	long glVertex2f;
	long glVertex2d;
	long glVertex2i;
	long glVertex3f;
	long glVertex3d;
	long glVertex3i;
	long glVertex4f;
	long glVertex4d;
	long glVertex4i;
	long glTranslatef;
	long glTranslated;
	long glTexImage1D;
	long glTexImage2D;
	long glTexSubImage1D;
	long glTexSubImage2D;
	long glTexParameterf;
	long glTexParameteri;
	long glTexParameterfv;
	long glTexParameteriv;
	long glTexGenf;
	long glTexGend;
	long glTexGenfv;
	long glTexGendv;
	long glTexGeni;
	long glTexGeniv;
	long glTexEnvf;
	long glTexEnvi;
	long glTexEnvfv;
	long glTexEnviv;
	long glTexCoordPointer;
	long glTexCoord1f;
	long glTexCoord1d;
	long glTexCoord2f;
	long glTexCoord2d;
	long glTexCoord3f;
	long glTexCoord3d;
	long glTexCoord4f;
	long glTexCoord4d;
	long glStencilOp;
	long glStencilMask;
	long glViewport;
	// GL12
	long glDrawRangeElements;
	long glTexImage3D;
	long glTexSubImage3D;
	long glCopyTexSubImage3D;
	// GL13
	long glActiveTexture;
	long glClientActiveTexture;
	long glCompressedTexImage1D;
	long glCompressedTexImage2D;
	long glCompressedTexImage3D;
	long glCompressedTexSubImage1D;
	long glCompressedTexSubImage2D;
	long glCompressedTexSubImage3D;
	long glGetCompressedTexImage;
	long glMultiTexCoord1f;
	long glMultiTexCoord1d;
	long glMultiTexCoord2f;
	long glMultiTexCoord2d;
	long glMultiTexCoord3f;
	long glMultiTexCoord3d;
	long glMultiTexCoord4f;
	long glMultiTexCoord4d;
	long glLoadTransposeMatrixf;
	long glLoadTransposeMatrixd;
	long glMultTransposeMatrixf;
	long glMultTransposeMatrixd;
	long glSampleCoverage;
	// GL14
	long glBlendEquation;
	long glBlendColor;
	long glFogCoordf;
	long glFogCoordd;
	long glFogCoordPointer;
	long glMultiDrawArrays;
	long glPointParameteri;
	long glPointParameterf;
	long glPointParameteriv;
	long glPointParameterfv;
	long glSecondaryColor3b;
	long glSecondaryColor3f;
	long glSecondaryColor3d;
	long glSecondaryColor3ub;
	long glSecondaryColorPointer;
	long glBlendFuncSeparate;
	long glWindowPos2f;
	long glWindowPos2d;
	long glWindowPos2i;
	long glWindowPos3f;
	long glWindowPos3d;
	long glWindowPos3i;
	// GL15
	long glBindBuffer;
	long glDeleteBuffers;
	long glGenBuffers;
	long glIsBuffer;
	long glBufferData;
	long glBufferSubData;
	long glGetBufferSubData;
	long glMapBuffer;
	long glUnmapBuffer;
	long glGetBufferParameteriv;
	long glGetBufferPointerv;
	long glGenQueries;
	long glDeleteQueries;
	long glIsQuery;
	long glBeginQuery;
	long glEndQuery;
	long glGetQueryiv;
	long glGetQueryObjectiv;
	long glGetQueryObjectuiv;
	// GL20
	long glShaderSource;
	long glCreateShader;
	long glIsShader;
	long glCompileShader;
	long glDeleteShader;
	long glCreateProgram;
	long glIsProgram;
	long glAttachShader;
	long glDetachShader;
	long glLinkProgram;
	long glUseProgram;
	long glValidateProgram;
	long glDeleteProgram;
	long glUniform1f;
	long glUniform2f;
	long glUniform3f;
	long glUniform4f;
	long glUniform1i;
	long glUniform2i;
	long glUniform3i;
	long glUniform4i;
	long glUniform1fv;
	long glUniform2fv;
	long glUniform3fv;
	long glUniform4fv;
	long glUniform1iv;
	long glUniform2iv;
	long glUniform3iv;
	long glUniform4iv;
	long glUniformMatrix2fv;
	long glUniformMatrix3fv;
	long glUniformMatrix4fv;
	long glGetShaderiv;
	long glGetProgramiv;
	long glGetShaderInfoLog;
	long glGetProgramInfoLog;
	long glGetAttachedShaders;
	long glGetUniformLocation;
	long glGetActiveUniform;
	long glGetUniformfv;
	long glGetUniformiv;
	long glGetShaderSource;
	long glVertexAttrib1s;
	long glVertexAttrib1f;
	long glVertexAttrib1d;
	long glVertexAttrib2s;
	long glVertexAttrib2f;
	long glVertexAttrib2d;
	long glVertexAttrib3s;
	long glVertexAttrib3f;
	long glVertexAttrib3d;
	long glVertexAttrib4s;
	long glVertexAttrib4f;
	long glVertexAttrib4d;
	long glVertexAttrib4Nub;
	long glVertexAttribPointer;
	long glEnableVertexAttribArray;
	long glDisableVertexAttribArray;
	long glGetVertexAttribfv;
	long glGetVertexAttribdv;
	long glGetVertexAttribiv;
	long glGetVertexAttribPointerv;
	long glBindAttribLocation;
	long glGetActiveAttrib;
	long glGetAttribLocation;
	long glDrawBuffers;
	long glStencilOpSeparate;
	long glStencilFuncSeparate;
	long glStencilMaskSeparate;
	long glBlendEquationSeparate;
	// GL21
	long glUniformMatrix2x3fv;
	long glUniformMatrix3x2fv;
	long glUniformMatrix2x4fv;
	long glUniformMatrix4x2fv;
	long glUniformMatrix3x4fv;
	long glUniformMatrix4x3fv;
	// GL30
	long glGetStringi;
	long glClearBufferfv;
	long glClearBufferiv;
	long glClearBufferuiv;
	long glClearBufferfi;
	long glVertexAttribI1i;
	long glVertexAttribI2i;
	long glVertexAttribI3i;
	long glVertexAttribI4i;
	long glVertexAttribI1ui;
	long glVertexAttribI2ui;
	long glVertexAttribI3ui;
	long glVertexAttribI4ui;
	long glVertexAttribI1iv;
	long glVertexAttribI2iv;
	long glVertexAttribI3iv;
	long glVertexAttribI4iv;
	long glVertexAttribI1uiv;
	long glVertexAttribI2uiv;
	long glVertexAttribI3uiv;
	long glVertexAttribI4uiv;
	long glVertexAttribI4bv;
	long glVertexAttribI4sv;
	long glVertexAttribI4ubv;
	long glVertexAttribI4usv;
	long glVertexAttribIPointer;
	long glGetVertexAttribIiv;
	long glGetVertexAttribIuiv;
	long glUniform1ui;
	long glUniform2ui;
	long glUniform3ui;
	long glUniform4ui;
	long glUniform1uiv;
	long glUniform2uiv;
	long glUniform3uiv;
	long glUniform4uiv;
	long glGetUniformuiv;
	long glBindFragDataLocation;
	long glGetFragDataLocation;
	long glBeginConditionalRender;
	long glEndConditionalRender;
	long glMapBufferRange;
	long glFlushMappedBufferRange;
	long glClampColor;
	long glIsRenderbuffer;
	long glBindRenderbuffer;
	long glDeleteRenderbuffers;
	long glGenRenderbuffers;
	long glRenderbufferStorage;
	long glGetRenderbufferParameteriv;
	long glIsFramebuffer;
	long glBindFramebuffer;
	long glDeleteFramebuffers;
	long glGenFramebuffers;
	long glCheckFramebufferStatus;
	long glFramebufferTexture1D;
	long glFramebufferTexture2D;
	long glFramebufferTexture3D;
	long glFramebufferRenderbuffer;
	long glGetFramebufferAttachmentParameteriv;
	long glGenerateMipmap;
	long glRenderbufferStorageMultisample;
	long glBlitFramebuffer;
	long glTexParameterIiv;
	long glTexParameterIuiv;
	long glGetTexParameterIiv;
	long glGetTexParameterIuiv;
	long glFramebufferTextureLayer;
	long glColorMaski;
	long glGetBooleani_v;
	long glGetIntegeri_v;
	long glEnablei;
	long glDisablei;
	long glIsEnabledi;
	long glBindBufferRange;
	long glBindBufferBase;
	long glBeginTransformFeedback;
	long glEndTransformFeedback;
	long glTransformFeedbackVaryings;
	long glGetTransformFeedbackVarying;
	long glBindVertexArray;
	long glDeleteVertexArrays;
	long glGenVertexArrays;
	long glIsVertexArray;
	// GL31
	long glDrawArraysInstanced;
	long glDrawElementsInstanced;
	long glCopyBufferSubData;
	long glPrimitiveRestartIndex;
	long glTexBuffer;
	long glGetUniformIndices;
	long glGetActiveUniformsiv;
	long glGetActiveUniformName;
	long glGetUniformBlockIndex;
	long glGetActiveUniformBlockiv;
	long glGetActiveUniformBlockName;
	long glUniformBlockBinding;
	// GL32
	long glGetBufferParameteri64v;
	long glDrawElementsBaseVertex;
	long glDrawRangeElementsBaseVertex;
	long glDrawElementsInstancedBaseVertex;
	long glProvokingVertex;
	long glTexImage2DMultisample;
	long glTexImage3DMultisample;
	long glGetMultisamplefv;
	long glSampleMaski;
	long glFramebufferTexture;
	long glFenceSync;
	long glIsSync;
	long glDeleteSync;
	long glClientWaitSync;
	long glWaitSync;
	long glGetInteger64v;
	long glGetInteger64i_v;
	long glGetSynciv;
	// GL33
	long glBindFragDataLocationIndexed;
	long glGetFragDataIndex;
	long glGenSamplers;
	long glDeleteSamplers;
	long glIsSampler;
	long glBindSampler;
	long glSamplerParameteri;
	long glSamplerParameterf;
	long glSamplerParameteriv;
	long glSamplerParameterfv;
	long glSamplerParameterIiv;
	long glSamplerParameterIuiv;
	long glGetSamplerParameteriv;
	long glGetSamplerParameterfv;
	long glGetSamplerParameterIiv;
	long glGetSamplerParameterIuiv;
	long glQueryCounter;
	long glGetQueryObjecti64v;
	long glGetQueryObjectui64v;
	long glVertexAttribDivisor;
	long glVertexP2ui;
	long glVertexP3ui;
	long glVertexP4ui;
	long glVertexP2uiv;
	long glVertexP3uiv;
	long glVertexP4uiv;
	long glTexCoordP1ui;
	long glTexCoordP2ui;
	long glTexCoordP3ui;
	long glTexCoordP4ui;
	long glTexCoordP1uiv;
	long glTexCoordP2uiv;
	long glTexCoordP3uiv;
	long glTexCoordP4uiv;
	long glMultiTexCoordP1ui;
	long glMultiTexCoordP2ui;
	long glMultiTexCoordP3ui;
	long glMultiTexCoordP4ui;
	long glMultiTexCoordP1uiv;
	long glMultiTexCoordP2uiv;
	long glMultiTexCoordP3uiv;
	long glMultiTexCoordP4uiv;
	long glNormalP3ui;
	long glNormalP3uiv;
	long glColorP3ui;
	long glColorP4ui;
	long glColorP3uiv;
	long glColorP4uiv;
	long glSecondaryColorP3ui;
	long glSecondaryColorP3uiv;
	long glVertexAttribP1ui;
	long glVertexAttribP2ui;
	long glVertexAttribP3ui;
	long glVertexAttribP4ui;
	long glVertexAttribP1uiv;
	long glVertexAttribP2uiv;
	long glVertexAttribP3uiv;
	long glVertexAttribP4uiv;
	// GL40
	long glBlendEquationi;
	long glBlendEquationSeparatei;
	long glBlendFunci;
	long glBlendFuncSeparatei;
	long glDrawArraysIndirect;
	long glDrawElementsIndirect;
	long glUniform1d;
	long glUniform2d;
	long glUniform3d;
	long glUniform4d;
	long glUniform1dv;
	long glUniform2dv;
	long glUniform3dv;
	long glUniform4dv;
	long glUniformMatrix2dv;
	long glUniformMatrix3dv;
	long glUniformMatrix4dv;
	long glUniformMatrix2x3dv;
	long glUniformMatrix2x4dv;
	long glUniformMatrix3x2dv;
	long glUniformMatrix3x4dv;
	long glUniformMatrix4x2dv;
	long glUniformMatrix4x3dv;
	long glGetUniformdv;
	long glMinSampleShading;
	long glGetSubroutineUniformLocation;
	long glGetSubroutineIndex;
	long glGetActiveSubroutineUniformiv;
	long glGetActiveSubroutineUniformName;
	long glGetActiveSubroutineName;
	long glUniformSubroutinesuiv;
	long glGetUniformSubroutineuiv;
	long glGetProgramStageiv;
	long glPatchParameteri;
	long glPatchParameterfv;
	long glBindTransformFeedback;
	long glDeleteTransformFeedbacks;
	long glGenTransformFeedbacks;
	long glIsTransformFeedback;
	long glPauseTransformFeedback;
	long glResumeTransformFeedback;
	long glDrawTransformFeedback;
	long glDrawTransformFeedbackStream;
	long glBeginQueryIndexed;
	long glEndQueryIndexed;
	long glGetQueryIndexediv;
	// GL41
	long glReleaseShaderCompiler;
	long glShaderBinary;
	long glGetShaderPrecisionFormat;
	long glDepthRangef;
	long glClearDepthf;
	long glGetProgramBinary;
	long glProgramBinary;
	long glProgramParameteri;
	long glUseProgramStages;
	long glActiveShaderProgram;
	long glCreateShaderProgramv;
	long glBindProgramPipeline;
	long glDeleteProgramPipelines;
	long glGenProgramPipelines;
	long glIsProgramPipeline;
	long glGetProgramPipelineiv;
	long glProgramUniform1i;
	long glProgramUniform2i;
	long glProgramUniform3i;
	long glProgramUniform4i;
	long glProgramUniform1f;
	long glProgramUniform2f;
	long glProgramUniform3f;
	long glProgramUniform4f;
	long glProgramUniform1d;
	long glProgramUniform2d;
	long glProgramUniform3d;
	long glProgramUniform4d;
	long glProgramUniform1iv;
	long glProgramUniform2iv;
	long glProgramUniform3iv;
	long glProgramUniform4iv;
	long glProgramUniform1fv;
	long glProgramUniform2fv;
	long glProgramUniform3fv;
	long glProgramUniform4fv;
	long glProgramUniform1dv;
	long glProgramUniform2dv;
	long glProgramUniform3dv;
	long glProgramUniform4dv;
	long glProgramUniform1ui;
	long glProgramUniform2ui;
	long glProgramUniform3ui;
	long glProgramUniform4ui;
	long glProgramUniform1uiv;
	long glProgramUniform2uiv;
	long glProgramUniform3uiv;
	long glProgramUniform4uiv;
	long glProgramUniformMatrix2fv;
	long glProgramUniformMatrix3fv;
	long glProgramUniformMatrix4fv;
	long glProgramUniformMatrix2dv;
	long glProgramUniformMatrix3dv;
	long glProgramUniformMatrix4dv;
	long glProgramUniformMatrix2x3fv;
	long glProgramUniformMatrix3x2fv;
	long glProgramUniformMatrix2x4fv;
	long glProgramUniformMatrix4x2fv;
	long glProgramUniformMatrix3x4fv;
	long glProgramUniformMatrix4x3fv;
	long glProgramUniformMatrix2x3dv;
	long glProgramUniformMatrix3x2dv;
	long glProgramUniformMatrix2x4dv;
	long glProgramUniformMatrix4x2dv;
	long glProgramUniformMatrix3x4dv;
	long glProgramUniformMatrix4x3dv;
	long glValidateProgramPipeline;
	long glGetProgramPipelineInfoLog;
	long glVertexAttribL1d;
	long glVertexAttribL2d;
	long glVertexAttribL3d;
	long glVertexAttribL4d;
	long glVertexAttribL1dv;
	long glVertexAttribL2dv;
	long glVertexAttribL3dv;
	long glVertexAttribL4dv;
	long glVertexAttribLPointer;
	long glGetVertexAttribLdv;
	long glViewportArrayv;
	long glViewportIndexedf;
	long glViewportIndexedfv;
	long glScissorArrayv;
	long glScissorIndexed;
	long glScissorIndexedv;
	long glDepthRangeArrayv;
	long glDepthRangeIndexed;
	long glGetFloati_v;
	long glGetDoublei_v;
	// GL42
	long glGetActiveAtomicCounterBufferiv;
	long glTexStorage1D;
	long glTexStorage2D;
	long glTexStorage3D;
	long glDrawTransformFeedbackInstanced;
	long glDrawTransformFeedbackStreamInstanced;
	long glDrawArraysInstancedBaseInstance;
	long glDrawElementsInstancedBaseInstance;
	long glDrawElementsInstancedBaseVertexBaseInstance;
	long glBindImageTexture;
	long glMemoryBarrier;
	long glGetInternalformativ;
	// GL43
	long glClearBufferData;
	long glClearBufferSubData;
	long glDispatchCompute;
	long glDispatchComputeIndirect;
	long glCopyImageSubData;
	long glDebugMessageControl;
	long glDebugMessageInsert;
	long glDebugMessageCallback;
	long glGetDebugMessageLog;
	long glPushDebugGroup;
	long glPopDebugGroup;
	long glObjectLabel;
	long glGetObjectLabel;
	long glObjectPtrLabel;
	long glGetObjectPtrLabel;
	long glFramebufferParameteri;
	long glGetFramebufferParameteriv;
	long glGetInternalformati64v;
	long glInvalidateTexSubImage;
	long glInvalidateTexImage;
	long glInvalidateBufferSubData;
	long glInvalidateBufferData;
	long glInvalidateFramebuffer;
	long glInvalidateSubFramebuffer;
	long glMultiDrawArraysIndirect;
	long glMultiDrawElementsIndirect;
	long glGetProgramInterfaceiv;
	long glGetProgramResourceIndex;
	long glGetProgramResourceName;
	long glGetProgramResourceiv;
	long glGetProgramResourceLocation;
	long glGetProgramResourceLocationIndex;
	long glShaderStorageBlockBinding;
	long glTexBufferRange;
	long glTexStorage2DMultisample;
	long glTexStorage3DMultisample;
	long glTextureView;
	long glBindVertexBuffer;
	long glVertexAttribFormat;
	long glVertexAttribIFormat;
	long glVertexAttribLFormat;
	long glVertexAttribBinding;
	long glVertexBindingDivisor;
	// GREMEDY_frame_terminator
	long glFrameTerminatorGREMEDY;
	// GREMEDY_string_marker
	long glStringMarkerGREMEDY;
	// INTEL_map_texture
	long glMapTexture2DINTEL;
	long glUnmapTexture2DINTEL;
	long glSyncTextureINTEL;
	// NV_bindless_texture
	long glGetTextureHandleNV;
	long glGetTextureSamplerHandleNV;
	long glMakeTextureHandleResidentNV;
	long glMakeTextureHandleNonResidentNV;
	long glGetImageHandleNV;
	long glMakeImageHandleResidentNV;
	long glMakeImageHandleNonResidentNV;
	long glUniformHandleui64NV;
	long glUniformHandleui64vNV;
	long glProgramUniformHandleui64NV;
	long glProgramUniformHandleui64vNV;
	long glIsTextureHandleResidentNV;
	long glIsImageHandleResidentNV;
	// NV_conditional_render
	long glBeginConditionalRenderNV;
	long glEndConditionalRenderNV;
	// NV_copy_image
	long glCopyImageSubDataNV;
	// NV_depth_buffer_float
	long glDepthRangedNV;
	long glClearDepthdNV;
	long glDepthBoundsdNV;
	// NV_draw_texture
	long glDrawTextureNV;
	// NV_evaluators
	long glGetMapControlPointsNV;
	long glMapControlPointsNV;
	long glMapParameterfvNV;
	long glMapParameterivNV;
	long glGetMapParameterfvNV;
	long glGetMapParameterivNV;
	long glGetMapAttribParameterfvNV;
	long glGetMapAttribParameterivNV;
	long glEvalMapsNV;
	// NV_explicit_multisample
	long glGetMultisamplefvNV;
	long glSampleMaskIndexedNV;
	long glTexRenderbufferNV;
	// NV_fence
	long glGenFencesNV;
	long glDeleteFencesNV;
	long glSetFenceNV;
	long glTestFenceNV;
	long glFinishFenceNV;
	long glIsFenceNV;
	long glGetFenceivNV;
	// NV_fragment_program
	long glProgramNamedParameter4fNV;
	long glProgramNamedParameter4dNV;
	long glGetProgramNamedParameterfvNV;
	long glGetProgramNamedParameterdvNV;
	// NV_framebuffer_multisample_coverage
	long glRenderbufferStorageMultisampleCoverageNV;
	// NV_geometry_program4
	long glProgramVertexLimitNV;
	// NV_gpu_program4
	long glProgramLocalParameterI4iNV;
	long glProgramLocalParameterI4ivNV;
	long glProgramLocalParametersI4ivNV;
	long glProgramLocalParameterI4uiNV;
	long glProgramLocalParameterI4uivNV;
	long glProgramLocalParametersI4uivNV;
	long glProgramEnvParameterI4iNV;
	long glProgramEnvParameterI4ivNV;
	long glProgramEnvParametersI4ivNV;
	long glProgramEnvParameterI4uiNV;
	long glProgramEnvParameterI4uivNV;
	long glProgramEnvParametersI4uivNV;
	long glGetProgramLocalParameterIivNV;
	long glGetProgramLocalParameterIuivNV;
	long glGetProgramEnvParameterIivNV;
	long glGetProgramEnvParameterIuivNV;
	// NV_gpu_shader5
	long glUniform1i64NV;
	long glUniform2i64NV;
	long glUniform3i64NV;
	long glUniform4i64NV;
	long glUniform1i64vNV;
	long glUniform2i64vNV;
	long glUniform3i64vNV;
	long glUniform4i64vNV;
	long glUniform1ui64NV;
	long glUniform2ui64NV;
	long glUniform3ui64NV;
	long glUniform4ui64NV;
	long glUniform1ui64vNV;
	long glUniform2ui64vNV;
	long glUniform3ui64vNV;
	long glUniform4ui64vNV;
	long glGetUniformi64vNV;
	long glGetUniformui64vNV;
	long glProgramUniform1i64NV;
	long glProgramUniform2i64NV;
	long glProgramUniform3i64NV;
	long glProgramUniform4i64NV;
	long glProgramUniform1i64vNV;
	long glProgramUniform2i64vNV;
	long glProgramUniform3i64vNV;
	long glProgramUniform4i64vNV;
	long glProgramUniform1ui64NV;
	long glProgramUniform2ui64NV;
	long glProgramUniform3ui64NV;
	long glProgramUniform4ui64NV;
	long glProgramUniform1ui64vNV;
	long glProgramUniform2ui64vNV;
	long glProgramUniform3ui64vNV;
	long glProgramUniform4ui64vNV;
	// NV_half_float
	long glVertex2hNV;
	long glVertex3hNV;
	long glVertex4hNV;
	long glNormal3hNV;
	long glColor3hNV;
	long glColor4hNV;
	long glTexCoord1hNV;
	long glTexCoord2hNV;
	long glTexCoord3hNV;
	long glTexCoord4hNV;
	long glMultiTexCoord1hNV;
	long glMultiTexCoord2hNV;
	long glMultiTexCoord3hNV;
	long glMultiTexCoord4hNV;
	long glFogCoordhNV;
	long glSecondaryColor3hNV;
	long glVertexWeighthNV;
	long glVertexAttrib1hNV;
	long glVertexAttrib2hNV;
	long glVertexAttrib3hNV;
	long glVertexAttrib4hNV;
	long glVertexAttribs1hvNV;
	long glVertexAttribs2hvNV;
	long glVertexAttribs3hvNV;
	long glVertexAttribs4hvNV;
	// NV_occlusion_query
	long glGenOcclusionQueriesNV;
	long glDeleteOcclusionQueriesNV;
	long glIsOcclusionQueryNV;
	long glBeginOcclusionQueryNV;
	long glEndOcclusionQueryNV;
	long glGetOcclusionQueryuivNV;
	long glGetOcclusionQueryivNV;
	// NV_parameter_buffer_object
	long glProgramBufferParametersfvNV;
	long glProgramBufferParametersIivNV;
	long glProgramBufferParametersIuivNV;
	// NV_path_rendering
	long glPathCommandsNV;
	long glPathCoordsNV;
	long glPathSubCommandsNV;
	long glPathSubCoordsNV;
	long glPathStringNV;
	long glPathGlyphsNV;
	long glPathGlyphRangeNV;
	long glWeightPathsNV;
	long glCopyPathNV;
	long glInterpolatePathsNV;
	long glTransformPathNV;
	long glPathParameterivNV;
	long glPathParameteriNV;
	long glPathParameterfvNV;
	long glPathParameterfNV;
	long glPathDashArrayNV;
	long glGenPathsNV;
	long glDeletePathsNV;
	long glIsPathNV;
	long glPathStencilFuncNV;
	long glPathStencilDepthOffsetNV;
	long glStencilFillPathNV;
	long glStencilStrokePathNV;
	long glStencilFillPathInstancedNV;
	long glStencilStrokePathInstancedNV;
	long glPathCoverDepthFuncNV;
	long glPathColorGenNV;
	long glPathTexGenNV;
	long glPathFogGenNV;
	long glCoverFillPathNV;
	long glCoverStrokePathNV;
	long glCoverFillPathInstancedNV;
	long glCoverStrokePathInstancedNV;
	long glGetPathParameterivNV;
	long glGetPathParameterfvNV;
	long glGetPathCommandsNV;
	long glGetPathCoordsNV;
	long glGetPathDashArrayNV;
	long glGetPathMetricsNV;
	long glGetPathMetricRangeNV;
	long glGetPathSpacingNV;
	long glGetPathColorGenivNV;
	long glGetPathColorGenfvNV;
	long glGetPathTexGenivNV;
	long glGetPathTexGenfvNV;
	long glIsPointInFillPathNV;
	long glIsPointInStrokePathNV;
	long glGetPathLengthNV;
	long glPointAlongPathNV;
	// NV_pixel_data_range
	long glPixelDataRangeNV;
	long glFlushPixelDataRangeNV;
	// NV_point_sprite
	long glPointParameteriNV;
	long glPointParameterivNV;
	// NV_present_video
	long glPresentFrameKeyedNV;
	long glPresentFrameDualFillNV;
	long glGetVideoivNV;
	long glGetVideouivNV;
	long glGetVideoi64vNV;
	long glGetVideoui64vNV;
	// NV_primitive_restart
	long glPrimitiveRestartNV;
	long glPrimitiveRestartIndexNV;
	// NV_program
	long glLoadProgramNV;
	long glBindProgramNV;
	long glDeleteProgramsNV;
	long glGenProgramsNV;
	long glGetProgramivNV;
	long glGetProgramStringNV;
	long glIsProgramNV;
	long glAreProgramsResidentNV;
	long glRequestResidentProgramsNV;
	// NV_register_combiners
	long glCombinerParameterfNV;
	long glCombinerParameterfvNV;
	long glCombinerParameteriNV;
	long glCombinerParameterivNV;
	long glCombinerInputNV;
	long glCombinerOutputNV;
	long glFinalCombinerInputNV;
	long glGetCombinerInputParameterfvNV;
	long glGetCombinerInputParameterivNV;
	long glGetCombinerOutputParameterfvNV;
	long glGetCombinerOutputParameterivNV;
	long glGetFinalCombinerInputParameterfvNV;
	long glGetFinalCombinerInputParameterivNV;
	// NV_register_combiners2
	long glCombinerStageParameterfvNV;
	long glGetCombinerStageParameterfvNV;
	// NV_shader_buffer_load
	long glMakeBufferResidentNV;
	long glMakeBufferNonResidentNV;
	long glIsBufferResidentNV;
	long glMakeNamedBufferResidentNV;
	long glMakeNamedBufferNonResidentNV;
	long glIsNamedBufferResidentNV;
	long glGetBufferParameterui64vNV;
	long glGetNamedBufferParameterui64vNV;
	long glGetIntegerui64vNV;
	long glUniformui64NV;
	long glUniformui64vNV;
	long glProgramUniformui64NV;
	long glProgramUniformui64vNV;
	// NV_texture_barrier
	long glTextureBarrierNV;
	// NV_texture_multisample
	long glTexImage2DMultisampleCoverageNV;
	long glTexImage3DMultisampleCoverageNV;
	long glTextureImage2DMultisampleNV;
	long glTextureImage3DMultisampleNV;
	long glTextureImage2DMultisampleCoverageNV;
	long glTextureImage3DMultisampleCoverageNV;
	// NV_transform_feedback
	long glBindBufferRangeNV;
	long glBindBufferOffsetNV;
	long glBindBufferBaseNV;
	long glTransformFeedbackAttribsNV;
	long glTransformFeedbackVaryingsNV;
	long glBeginTransformFeedbackNV;
	long glEndTransformFeedbackNV;
	long glGetVaryingLocationNV;
	long glGetActiveVaryingNV;
	long glActiveVaryingNV;
	long glGetTransformFeedbackVaryingNV;
	// NV_transform_feedback2
	long glBindTransformFeedbackNV;
	long glDeleteTransformFeedbacksNV;
	long glGenTransformFeedbacksNV;
	long glIsTransformFeedbackNV;
	long glPauseTransformFeedbackNV;
	long glResumeTransformFeedbackNV;
	long glDrawTransformFeedbackNV;
	// NV_vertex_array_range
	long glVertexArrayRangeNV;
	long glFlushVertexArrayRangeNV;
	long glAllocateMemoryNV;
	long glFreeMemoryNV;
	// NV_vertex_attrib_integer_64bit
	long glVertexAttribL1i64NV;
	long glVertexAttribL2i64NV;
	long glVertexAttribL3i64NV;
	long glVertexAttribL4i64NV;
	long glVertexAttribL1i64vNV;
	long glVertexAttribL2i64vNV;
	long glVertexAttribL3i64vNV;
	long glVertexAttribL4i64vNV;
	long glVertexAttribL1ui64NV;
	long glVertexAttribL2ui64NV;
	long glVertexAttribL3ui64NV;
	long glVertexAttribL4ui64NV;
	long glVertexAttribL1ui64vNV;
	long glVertexAttribL2ui64vNV;
	long glVertexAttribL3ui64vNV;
	long glVertexAttribL4ui64vNV;
	long glGetVertexAttribLi64vNV;
	long glGetVertexAttribLui64vNV;
	long glVertexAttribLFormatNV;
	// NV_vertex_buffer_unified_memory
	long glBufferAddressRangeNV;
	long glVertexFormatNV;
	long glNormalFormatNV;
	long glColorFormatNV;
	long glIndexFormatNV;
	long glTexCoordFormatNV;
	long glEdgeFlagFormatNV;
	long glSecondaryColorFormatNV;
	long glFogCoordFormatNV;
	long glVertexAttribFormatNV;
	long glVertexAttribIFormatNV;
	long glGetIntegerui64i_vNV;
	// NV_vertex_program
	long glExecuteProgramNV;
	long glGetProgramParameterfvNV;
	long glGetProgramParameterdvNV;
	long glGetTrackMatrixivNV;
	long glGetVertexAttribfvNV;
	long glGetVertexAttribdvNV;
	long glGetVertexAttribivNV;
	long glGetVertexAttribPointervNV;
	long glProgramParameter4fNV;
	long glProgramParameter4dNV;
	long glProgramParameters4fvNV;
	long glProgramParameters4dvNV;
	long glTrackMatrixNV;
	long glVertexAttribPointerNV;
	long glVertexAttrib1sNV;
	long glVertexAttrib1fNV;
	long glVertexAttrib1dNV;
	long glVertexAttrib2sNV;
	long glVertexAttrib2fNV;
	long glVertexAttrib2dNV;
	long glVertexAttrib3sNV;
	long glVertexAttrib3fNV;
	long glVertexAttrib3dNV;
	long glVertexAttrib4sNV;
	long glVertexAttrib4fNV;
	long glVertexAttrib4dNV;
	long glVertexAttrib4ubNV;
	long glVertexAttribs1svNV;
	long glVertexAttribs1fvNV;
	long glVertexAttribs1dvNV;
	long glVertexAttribs2svNV;
	long glVertexAttribs2fvNV;
	long glVertexAttribs2dvNV;
	long glVertexAttribs3svNV;
	long glVertexAttribs3fvNV;
	long glVertexAttribs3dvNV;
	long glVertexAttribs4svNV;
	long glVertexAttribs4fvNV;
	long glVertexAttribs4dvNV;
	// NV_video_capture
	long glBeginVideoCaptureNV;
	long glBindVideoCaptureStreamBufferNV;
	long glBindVideoCaptureStreamTextureNV;
	long glEndVideoCaptureNV;
	long glGetVideoCaptureivNV;
	long glGetVideoCaptureStreamivNV;
	long glGetVideoCaptureStreamfvNV;
	long glGetVideoCaptureStreamdvNV;
	long glVideoCaptureNV;
	long glVideoCaptureStreamParameterivNV;
	long glVideoCaptureStreamParameterfvNV;
	long glVideoCaptureStreamParameterdvNV;

	private boolean AMD_debug_output_initNativeFunctionAddresses() {
		return
			(glDebugMessageEnableAMD = GLContext.getFunctionAddress(new String[] {"glDebugMessageEnableAMD","glDebugMessageEnableAMDX"})) != 0 &
			(glDebugMessageInsertAMD = GLContext.getFunctionAddress(new String[] {"glDebugMessageInsertAMD","glDebugMessageInsertAMDX"})) != 0 &
			(glDebugMessageCallbackAMD = GLContext.getFunctionAddress(new String[] {"glDebugMessageCallbackAMD","glDebugMessageCallbackAMDX"})) != 0 &
			(glGetDebugMessageLogAMD = GLContext.getFunctionAddress(new String[] {"glGetDebugMessageLogAMD","glGetDebugMessageLogAMDX"})) != 0;
	}

	private boolean AMD_draw_buffers_blend_initNativeFunctionAddresses() {
		return
			(glBlendFuncIndexedAMD = GLContext.getFunctionAddress("glBlendFuncIndexedAMD")) != 0 &
			(glBlendFuncSeparateIndexedAMD = GLContext.getFunctionAddress("glBlendFuncSeparateIndexedAMD")) != 0 &
			(glBlendEquationIndexedAMD = GLContext.getFunctionAddress("glBlendEquationIndexedAMD")) != 0 &
			(glBlendEquationSeparateIndexedAMD = GLContext.getFunctionAddress("glBlendEquationSeparateIndexedAMD")) != 0;
	}

	private boolean AMD_multi_draw_indirect_initNativeFunctionAddresses() {
		return
			(glMultiDrawArraysIndirectAMD = GLContext.getFunctionAddress("glMultiDrawArraysIndirectAMD")) != 0 &
			(glMultiDrawElementsIndirectAMD = GLContext.getFunctionAddress("glMultiDrawElementsIndirectAMD")) != 0;
	}

	private boolean AMD_name_gen_delete_initNativeFunctionAddresses() {
		return
			(glGenNamesAMD = GLContext.getFunctionAddress("glGenNamesAMD")) != 0 &
			(glDeleteNamesAMD = GLContext.getFunctionAddress("glDeleteNamesAMD")) != 0 &
			(glIsNameAMD = GLContext.getFunctionAddress("glIsNameAMD")) != 0;
	}

	private boolean AMD_performance_monitor_initNativeFunctionAddresses() {
		return
			(glGetPerfMonitorGroupsAMD = GLContext.getFunctionAddress("glGetPerfMonitorGroupsAMD")) != 0 &
			(glGetPerfMonitorCountersAMD = GLContext.getFunctionAddress("glGetPerfMonitorCountersAMD")) != 0 &
			(glGetPerfMonitorGroupStringAMD = GLContext.getFunctionAddress("glGetPerfMonitorGroupStringAMD")) != 0 &
			(glGetPerfMonitorCounterStringAMD = GLContext.getFunctionAddress("glGetPerfMonitorCounterStringAMD")) != 0 &
			(glGetPerfMonitorCounterInfoAMD = GLContext.getFunctionAddress("glGetPerfMonitorCounterInfoAMD")) != 0 &
			(glGenPerfMonitorsAMD = GLContext.getFunctionAddress("glGenPerfMonitorsAMD")) != 0 &
			(glDeletePerfMonitorsAMD = GLContext.getFunctionAddress("glDeletePerfMonitorsAMD")) != 0 &
			(glSelectPerfMonitorCountersAMD = GLContext.getFunctionAddress("glSelectPerfMonitorCountersAMD")) != 0 &
			(glBeginPerfMonitorAMD = GLContext.getFunctionAddress("glBeginPerfMonitorAMD")) != 0 &
			(glEndPerfMonitorAMD = GLContext.getFunctionAddress("glEndPerfMonitorAMD")) != 0 &
			(glGetPerfMonitorCounterDataAMD = GLContext.getFunctionAddress("glGetPerfMonitorCounterDataAMD")) != 0;
	}

	private boolean AMD_sample_positions_initNativeFunctionAddresses() {
		return
			(glSetMultisamplefvAMD = GLContext.getFunctionAddress("glSetMultisamplefvAMD")) != 0;
	}

	private boolean AMD_sparse_texture_initNativeFunctionAddresses() {
		return
			(glTexStorageSparseAMD = GLContext.getFunctionAddress("glTexStorageSparseAMD")) != 0 &
			(glTextureStorageSparseAMD = GLContext.getFunctionAddress("glTextureStorageSparseAMD")) != 0;
	}

	private boolean AMD_stencil_operation_extended_initNativeFunctionAddresses() {
		return
			(glStencilOpValueAMD = GLContext.getFunctionAddress("glStencilOpValueAMD")) != 0;
	}

	private boolean AMD_vertex_shader_tessellator_initNativeFunctionAddresses() {
		return
			(glTessellationFactorAMD = GLContext.getFunctionAddress("glTessellationFactorAMD")) != 0 &
			(glTessellationModeAMD = GLContext.getFunctionAddress("glTessellationModeAMD")) != 0;
	}

	private boolean APPLE_element_array_initNativeFunctionAddresses() {
		return
			(glElementPointerAPPLE = GLContext.getFunctionAddress("glElementPointerAPPLE")) != 0 &
			(glDrawElementArrayAPPLE = GLContext.getFunctionAddress("glDrawElementArrayAPPLE")) != 0 &
			(glDrawRangeElementArrayAPPLE = GLContext.getFunctionAddress("glDrawRangeElementArrayAPPLE")) != 0 &
			(glMultiDrawElementArrayAPPLE = GLContext.getFunctionAddress("glMultiDrawElementArrayAPPLE")) != 0 &
			(glMultiDrawRangeElementArrayAPPLE = GLContext.getFunctionAddress("glMultiDrawRangeElementArrayAPPLE")) != 0;
	}

	private boolean APPLE_fence_initNativeFunctionAddresses() {
		return
			(glGenFencesAPPLE = GLContext.getFunctionAddress("glGenFencesAPPLE")) != 0 &
			(glDeleteFencesAPPLE = GLContext.getFunctionAddress("glDeleteFencesAPPLE")) != 0 &
			(glSetFenceAPPLE = GLContext.getFunctionAddress("glSetFenceAPPLE")) != 0 &
			(glIsFenceAPPLE = GLContext.getFunctionAddress("glIsFenceAPPLE")) != 0 &
			(glTestFenceAPPLE = GLContext.getFunctionAddress("glTestFenceAPPLE")) != 0 &
			(glFinishFenceAPPLE = GLContext.getFunctionAddress("glFinishFenceAPPLE")) != 0 &
			(glTestObjectAPPLE = GLContext.getFunctionAddress("glTestObjectAPPLE")) != 0 &
			(glFinishObjectAPPLE = GLContext.getFunctionAddress("glFinishObjectAPPLE")) != 0;
	}

	private boolean APPLE_flush_buffer_range_initNativeFunctionAddresses() {
		return
			(glBufferParameteriAPPLE = GLContext.getFunctionAddress("glBufferParameteriAPPLE")) != 0 &
			(glFlushMappedBufferRangeAPPLE = GLContext.getFunctionAddress("glFlushMappedBufferRangeAPPLE")) != 0;
	}

	private boolean APPLE_object_purgeable_initNativeFunctionAddresses() {
		return
			(glObjectPurgeableAPPLE = GLContext.getFunctionAddress("glObjectPurgeableAPPLE")) != 0 &
			(glObjectUnpurgeableAPPLE = GLContext.getFunctionAddress("glObjectUnpurgeableAPPLE")) != 0 &
			(glGetObjectParameterivAPPLE = GLContext.getFunctionAddress("glGetObjectParameterivAPPLE")) != 0;
	}

	private boolean APPLE_texture_range_initNativeFunctionAddresses() {
		return
			(glTextureRangeAPPLE = GLContext.getFunctionAddress("glTextureRangeAPPLE")) != 0 &
			(glGetTexParameterPointervAPPLE = GLContext.getFunctionAddress("glGetTexParameterPointervAPPLE")) != 0;
	}

	private boolean APPLE_vertex_array_object_initNativeFunctionAddresses() {
		return
			(glBindVertexArrayAPPLE = GLContext.getFunctionAddress("glBindVertexArrayAPPLE")) != 0 &
			(glDeleteVertexArraysAPPLE = GLContext.getFunctionAddress("glDeleteVertexArraysAPPLE")) != 0 &
			(glGenVertexArraysAPPLE = GLContext.getFunctionAddress("glGenVertexArraysAPPLE")) != 0 &
			(glIsVertexArrayAPPLE = GLContext.getFunctionAddress("glIsVertexArrayAPPLE")) != 0;
	}

	private boolean APPLE_vertex_array_range_initNativeFunctionAddresses() {
		return
			(glVertexArrayRangeAPPLE = GLContext.getFunctionAddress("glVertexArrayRangeAPPLE")) != 0 &
			(glFlushVertexArrayRangeAPPLE = GLContext.getFunctionAddress("glFlushVertexArrayRangeAPPLE")) != 0 &
			(glVertexArrayParameteriAPPLE = GLContext.getFunctionAddress("glVertexArrayParameteriAPPLE")) != 0;
	}

	private boolean APPLE_vertex_program_evaluators_initNativeFunctionAddresses() {
		return
			(glEnableVertexAttribAPPLE = GLContext.getFunctionAddress("glEnableVertexAttribAPPLE")) != 0 &
			(glDisableVertexAttribAPPLE = GLContext.getFunctionAddress("glDisableVertexAttribAPPLE")) != 0 &
			(glIsVertexAttribEnabledAPPLE = GLContext.getFunctionAddress("glIsVertexAttribEnabledAPPLE")) != 0 &
			(glMapVertexAttrib1dAPPLE = GLContext.getFunctionAddress("glMapVertexAttrib1dAPPLE")) != 0 &
			(glMapVertexAttrib1fAPPLE = GLContext.getFunctionAddress("glMapVertexAttrib1fAPPLE")) != 0 &
			(glMapVertexAttrib2dAPPLE = GLContext.getFunctionAddress("glMapVertexAttrib2dAPPLE")) != 0 &
			(glMapVertexAttrib2fAPPLE = GLContext.getFunctionAddress("glMapVertexAttrib2fAPPLE")) != 0;
	}

	private boolean ARB_ES2_compatibility_initNativeFunctionAddresses() {
		return
			(glReleaseShaderCompiler = GLContext.getFunctionAddress("glReleaseShaderCompiler")) != 0 &
			(glShaderBinary = GLContext.getFunctionAddress("glShaderBinary")) != 0 &
			(glGetShaderPrecisionFormat = GLContext.getFunctionAddress("glGetShaderPrecisionFormat")) != 0 &
			(glDepthRangef = GLContext.getFunctionAddress("glDepthRangef")) != 0 &
			(glClearDepthf = GLContext.getFunctionAddress("glClearDepthf")) != 0;
	}

	private boolean ARB_base_instance_initNativeFunctionAddresses() {
		return
			(glDrawArraysInstancedBaseInstance = GLContext.getFunctionAddress("glDrawArraysInstancedBaseInstance")) != 0 &
			(glDrawElementsInstancedBaseInstance = GLContext.getFunctionAddress("glDrawElementsInstancedBaseInstance")) != 0 &
			(glDrawElementsInstancedBaseVertexBaseInstance = GLContext.getFunctionAddress("glDrawElementsInstancedBaseVertexBaseInstance")) != 0;
	}

	private boolean ARB_blend_func_extended_initNativeFunctionAddresses() {
		return
			(glBindFragDataLocationIndexed = GLContext.getFunctionAddress("glBindFragDataLocationIndexed")) != 0 &
			(glGetFragDataIndex = GLContext.getFunctionAddress("glGetFragDataIndex")) != 0;
	}

	private boolean ARB_buffer_object_initNativeFunctionAddresses() {
		return
			(glBindBufferARB = GLContext.getFunctionAddress("glBindBufferARB")) != 0 &
			(glDeleteBuffersARB = GLContext.getFunctionAddress("glDeleteBuffersARB")) != 0 &
			(glGenBuffersARB = GLContext.getFunctionAddress("glGenBuffersARB")) != 0 &
			(glIsBufferARB = GLContext.getFunctionAddress("glIsBufferARB")) != 0 &
			(glBufferDataARB = GLContext.getFunctionAddress("glBufferDataARB")) != 0 &
			(glBufferSubDataARB = GLContext.getFunctionAddress("glBufferSubDataARB")) != 0 &
			(glGetBufferSubDataARB = GLContext.getFunctionAddress("glGetBufferSubDataARB")) != 0 &
			(glMapBufferARB = GLContext.getFunctionAddress("glMapBufferARB")) != 0 &
			(glUnmapBufferARB = GLContext.getFunctionAddress("glUnmapBufferARB")) != 0 &
			(glGetBufferParameterivARB = GLContext.getFunctionAddress("glGetBufferParameterivARB")) != 0 &
			(glGetBufferPointervARB = GLContext.getFunctionAddress("glGetBufferPointervARB")) != 0;
	}

	private boolean ARB_cl_event_initNativeFunctionAddresses() {
		return
			(glCreateSyncFromCLeventARB = GLContext.getFunctionAddress("glCreateSyncFromCLeventARB")) != 0;
	}

	private boolean ARB_clear_buffer_object_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glClearBufferData = GLContext.getFunctionAddress("glClearBufferData")) != 0 &
			(glClearBufferSubData = GLContext.getFunctionAddress("glClearBufferSubData")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glClearNamedBufferDataEXT = GLContext.getFunctionAddress("glClearNamedBufferDataEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glClearNamedBufferSubDataEXT = GLContext.getFunctionAddress("glClearNamedBufferSubDataEXT")) != 0);
	}

	private boolean ARB_color_buffer_float_initNativeFunctionAddresses() {
		return
			(glClampColorARB = GLContext.getFunctionAddress("glClampColorARB")) != 0;
	}

	private boolean ARB_compute_shader_initNativeFunctionAddresses() {
		return
			(glDispatchCompute = GLContext.getFunctionAddress("glDispatchCompute")) != 0 &
			(glDispatchComputeIndirect = GLContext.getFunctionAddress("glDispatchComputeIndirect")) != 0;
	}

	private boolean ARB_copy_buffer_initNativeFunctionAddresses() {
		return
			(glCopyBufferSubData = GLContext.getFunctionAddress("glCopyBufferSubData")) != 0;
	}

	private boolean ARB_copy_image_initNativeFunctionAddresses() {
		return
			(glCopyImageSubData = GLContext.getFunctionAddress("glCopyImageSubData")) != 0;
	}

	private boolean ARB_debug_output_initNativeFunctionAddresses() {
		return
			(glDebugMessageControlARB = GLContext.getFunctionAddress("glDebugMessageControlARB")) != 0 &
			(glDebugMessageInsertARB = GLContext.getFunctionAddress("glDebugMessageInsertARB")) != 0 &
			(glDebugMessageCallbackARB = GLContext.getFunctionAddress("glDebugMessageCallbackARB")) != 0 &
			(glGetDebugMessageLogARB = GLContext.getFunctionAddress("glGetDebugMessageLogARB")) != 0;
	}

	private boolean ARB_draw_buffers_initNativeFunctionAddresses() {
		return
			(glDrawBuffersARB = GLContext.getFunctionAddress("glDrawBuffersARB")) != 0;
	}

	private boolean ARB_draw_buffers_blend_initNativeFunctionAddresses() {
		return
			(glBlendEquationiARB = GLContext.getFunctionAddress("glBlendEquationiARB")) != 0 &
			(glBlendEquationSeparateiARB = GLContext.getFunctionAddress("glBlendEquationSeparateiARB")) != 0 &
			(glBlendFunciARB = GLContext.getFunctionAddress("glBlendFunciARB")) != 0 &
			(glBlendFuncSeparateiARB = GLContext.getFunctionAddress("glBlendFuncSeparateiARB")) != 0;
	}

	private boolean ARB_draw_elements_base_vertex_initNativeFunctionAddresses() {
		return
			(glDrawElementsBaseVertex = GLContext.getFunctionAddress("glDrawElementsBaseVertex")) != 0 &
			(glDrawRangeElementsBaseVertex = GLContext.getFunctionAddress("glDrawRangeElementsBaseVertex")) != 0 &
			(glDrawElementsInstancedBaseVertex = GLContext.getFunctionAddress("glDrawElementsInstancedBaseVertex")) != 0;
	}

	private boolean ARB_draw_indirect_initNativeFunctionAddresses() {
		return
			(glDrawArraysIndirect = GLContext.getFunctionAddress("glDrawArraysIndirect")) != 0 &
			(glDrawElementsIndirect = GLContext.getFunctionAddress("glDrawElementsIndirect")) != 0;
	}

	private boolean ARB_draw_instanced_initNativeFunctionAddresses() {
		return
			(glDrawArraysInstancedARB = GLContext.getFunctionAddress("glDrawArraysInstancedARB")) != 0 &
			(glDrawElementsInstancedARB = GLContext.getFunctionAddress("glDrawElementsInstancedARB")) != 0;
	}

	private boolean ARB_framebuffer_no_attachments_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glFramebufferParameteri = GLContext.getFunctionAddress("glFramebufferParameteri")) != 0 &
			(glGetFramebufferParameteriv = GLContext.getFunctionAddress("glGetFramebufferParameteriv")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glNamedFramebufferParameteriEXT = GLContext.getFunctionAddress("glNamedFramebufferParameteriEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glGetNamedFramebufferParameterivEXT = GLContext.getFunctionAddress("glGetNamedFramebufferParameterivEXT")) != 0);
	}

	private boolean ARB_framebuffer_object_initNativeFunctionAddresses() {
		return
			(glIsRenderbuffer = GLContext.getFunctionAddress("glIsRenderbuffer")) != 0 &
			(glBindRenderbuffer = GLContext.getFunctionAddress("glBindRenderbuffer")) != 0 &
			(glDeleteRenderbuffers = GLContext.getFunctionAddress("glDeleteRenderbuffers")) != 0 &
			(glGenRenderbuffers = GLContext.getFunctionAddress("glGenRenderbuffers")) != 0 &
			(glRenderbufferStorage = GLContext.getFunctionAddress("glRenderbufferStorage")) != 0 &
			(glRenderbufferStorageMultisample = GLContext.getFunctionAddress("glRenderbufferStorageMultisample")) != 0 &
			(glGetRenderbufferParameteriv = GLContext.getFunctionAddress("glGetRenderbufferParameteriv")) != 0 &
			(glIsFramebuffer = GLContext.getFunctionAddress("glIsFramebuffer")) != 0 &
			(glBindFramebuffer = GLContext.getFunctionAddress("glBindFramebuffer")) != 0 &
			(glDeleteFramebuffers = GLContext.getFunctionAddress("glDeleteFramebuffers")) != 0 &
			(glGenFramebuffers = GLContext.getFunctionAddress("glGenFramebuffers")) != 0 &
			(glCheckFramebufferStatus = GLContext.getFunctionAddress("glCheckFramebufferStatus")) != 0 &
			(glFramebufferTexture1D = GLContext.getFunctionAddress("glFramebufferTexture1D")) != 0 &
			(glFramebufferTexture2D = GLContext.getFunctionAddress("glFramebufferTexture2D")) != 0 &
			(glFramebufferTexture3D = GLContext.getFunctionAddress("glFramebufferTexture3D")) != 0 &
			(glFramebufferTextureLayer = GLContext.getFunctionAddress("glFramebufferTextureLayer")) != 0 &
			(glFramebufferRenderbuffer = GLContext.getFunctionAddress("glFramebufferRenderbuffer")) != 0 &
			(glGetFramebufferAttachmentParameteriv = GLContext.getFunctionAddress("glGetFramebufferAttachmentParameteriv")) != 0 &
			(glBlitFramebuffer = GLContext.getFunctionAddress("glBlitFramebuffer")) != 0 &
			(glGenerateMipmap = GLContext.getFunctionAddress("glGenerateMipmap")) != 0;
	}

	private boolean ARB_geometry_shader4_initNativeFunctionAddresses() {
		return
			(glProgramParameteriARB = GLContext.getFunctionAddress("glProgramParameteriARB")) != 0 &
			(glFramebufferTextureARB = GLContext.getFunctionAddress("glFramebufferTextureARB")) != 0 &
			(glFramebufferTextureLayerARB = GLContext.getFunctionAddress("glFramebufferTextureLayerARB")) != 0 &
			(glFramebufferTextureFaceARB = GLContext.getFunctionAddress("glFramebufferTextureFaceARB")) != 0;
	}

	private boolean ARB_get_program_binary_initNativeFunctionAddresses() {
		return
			(glGetProgramBinary = GLContext.getFunctionAddress("glGetProgramBinary")) != 0 &
			(glProgramBinary = GLContext.getFunctionAddress("glProgramBinary")) != 0 &
			(glProgramParameteri = GLContext.getFunctionAddress("glProgramParameteri")) != 0;
	}

	private boolean ARB_gpu_shader_fp64_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glUniform1d = GLContext.getFunctionAddress("glUniform1d")) != 0 &
			(glUniform2d = GLContext.getFunctionAddress("glUniform2d")) != 0 &
			(glUniform3d = GLContext.getFunctionAddress("glUniform3d")) != 0 &
			(glUniform4d = GLContext.getFunctionAddress("glUniform4d")) != 0 &
			(glUniform1dv = GLContext.getFunctionAddress("glUniform1dv")) != 0 &
			(glUniform2dv = GLContext.getFunctionAddress("glUniform2dv")) != 0 &
			(glUniform3dv = GLContext.getFunctionAddress("glUniform3dv")) != 0 &
			(glUniform4dv = GLContext.getFunctionAddress("glUniform4dv")) != 0 &
			(glUniformMatrix2dv = GLContext.getFunctionAddress("glUniformMatrix2dv")) != 0 &
			(glUniformMatrix3dv = GLContext.getFunctionAddress("glUniformMatrix3dv")) != 0 &
			(glUniformMatrix4dv = GLContext.getFunctionAddress("glUniformMatrix4dv")) != 0 &
			(glUniformMatrix2x3dv = GLContext.getFunctionAddress("glUniformMatrix2x3dv")) != 0 &
			(glUniformMatrix2x4dv = GLContext.getFunctionAddress("glUniformMatrix2x4dv")) != 0 &
			(glUniformMatrix3x2dv = GLContext.getFunctionAddress("glUniformMatrix3x2dv")) != 0 &
			(glUniformMatrix3x4dv = GLContext.getFunctionAddress("glUniformMatrix3x4dv")) != 0 &
			(glUniformMatrix4x2dv = GLContext.getFunctionAddress("glUniformMatrix4x2dv")) != 0 &
			(glUniformMatrix4x3dv = GLContext.getFunctionAddress("glUniformMatrix4x3dv")) != 0 &
			(glGetUniformdv = GLContext.getFunctionAddress("glGetUniformdv")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform1dEXT = GLContext.getFunctionAddress("glProgramUniform1dEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform2dEXT = GLContext.getFunctionAddress("glProgramUniform2dEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform3dEXT = GLContext.getFunctionAddress("glProgramUniform3dEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform4dEXT = GLContext.getFunctionAddress("glProgramUniform4dEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform1dvEXT = GLContext.getFunctionAddress("glProgramUniform1dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform2dvEXT = GLContext.getFunctionAddress("glProgramUniform2dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform3dvEXT = GLContext.getFunctionAddress("glProgramUniform3dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform4dvEXT = GLContext.getFunctionAddress("glProgramUniform4dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix2dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix2dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix3dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix3dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix4dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix4dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix2x3dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix2x3dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix2x4dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix2x4dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix3x2dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix3x2dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix3x4dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix3x4dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix4x2dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix4x2dvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniformMatrix4x3dvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix4x3dvEXT")) != 0);
	}

	private boolean ARB_imaging_initNativeFunctionAddresses(boolean forwardCompatible) {
		return
			(forwardCompatible || (glColorTable = GLContext.getFunctionAddress("glColorTable")) != 0) &
			(forwardCompatible || (glColorSubTable = GLContext.getFunctionAddress("glColorSubTable")) != 0) &
			(forwardCompatible || (glColorTableParameteriv = GLContext.getFunctionAddress("glColorTableParameteriv")) != 0) &
			(forwardCompatible || (glColorTableParameterfv = GLContext.getFunctionAddress("glColorTableParameterfv")) != 0) &
			(forwardCompatible || (glCopyColorSubTable = GLContext.getFunctionAddress("glCopyColorSubTable")) != 0) &
			(forwardCompatible || (glCopyColorTable = GLContext.getFunctionAddress("glCopyColorTable")) != 0) &
			(forwardCompatible || (glGetColorTable = GLContext.getFunctionAddress("glGetColorTable")) != 0) &
			(forwardCompatible || (glGetColorTableParameteriv = GLContext.getFunctionAddress("glGetColorTableParameteriv")) != 0) &
			(forwardCompatible || (glGetColorTableParameterfv = GLContext.getFunctionAddress("glGetColorTableParameterfv")) != 0) &
			(glBlendEquation = GLContext.getFunctionAddress("glBlendEquation")) != 0 &
			(glBlendColor = GLContext.getFunctionAddress("glBlendColor")) != 0 &
			(forwardCompatible || (glHistogram = GLContext.getFunctionAddress("glHistogram")) != 0) &
			(forwardCompatible || (glResetHistogram = GLContext.getFunctionAddress("glResetHistogram")) != 0) &
			(forwardCompatible || (glGetHistogram = GLContext.getFunctionAddress("glGetHistogram")) != 0) &
			(forwardCompatible || (glGetHistogramParameterfv = GLContext.getFunctionAddress("glGetHistogramParameterfv")) != 0) &
			(forwardCompatible || (glGetHistogramParameteriv = GLContext.getFunctionAddress("glGetHistogramParameteriv")) != 0) &
			(forwardCompatible || (glMinmax = GLContext.getFunctionAddress("glMinmax")) != 0) &
			(forwardCompatible || (glResetMinmax = GLContext.getFunctionAddress("glResetMinmax")) != 0) &
			(forwardCompatible || (glGetMinmax = GLContext.getFunctionAddress("glGetMinmax")) != 0) &
			(forwardCompatible || (glGetMinmaxParameterfv = GLContext.getFunctionAddress("glGetMinmaxParameterfv")) != 0) &
			(forwardCompatible || (glGetMinmaxParameteriv = GLContext.getFunctionAddress("glGetMinmaxParameteriv")) != 0) &
			(forwardCompatible || (glConvolutionFilter1D = GLContext.getFunctionAddress("glConvolutionFilter1D")) != 0) &
			(forwardCompatible || (glConvolutionFilter2D = GLContext.getFunctionAddress("glConvolutionFilter2D")) != 0) &
			(forwardCompatible || (glConvolutionParameterf = GLContext.getFunctionAddress("glConvolutionParameterf")) != 0) &
			(forwardCompatible || (glConvolutionParameterfv = GLContext.getFunctionAddress("glConvolutionParameterfv")) != 0) &
			(forwardCompatible || (glConvolutionParameteri = GLContext.getFunctionAddress("glConvolutionParameteri")) != 0) &
			(forwardCompatible || (glConvolutionParameteriv = GLContext.getFunctionAddress("glConvolutionParameteriv")) != 0) &
			(forwardCompatible || (glCopyConvolutionFilter1D = GLContext.getFunctionAddress("glCopyConvolutionFilter1D")) != 0) &
			(forwardCompatible || (glCopyConvolutionFilter2D = GLContext.getFunctionAddress("glCopyConvolutionFilter2D")) != 0) &
			(forwardCompatible || (glGetConvolutionFilter = GLContext.getFunctionAddress("glGetConvolutionFilter")) != 0) &
			(forwardCompatible || (glGetConvolutionParameterfv = GLContext.getFunctionAddress("glGetConvolutionParameterfv")) != 0) &
			(forwardCompatible || (glGetConvolutionParameteriv = GLContext.getFunctionAddress("glGetConvolutionParameteriv")) != 0) &
			(forwardCompatible || (glSeparableFilter2D = GLContext.getFunctionAddress("glSeparableFilter2D")) != 0) &
			(forwardCompatible || (glGetSeparableFilter = GLContext.getFunctionAddress("glGetSeparableFilter")) != 0);
	}

	private boolean ARB_instanced_arrays_initNativeFunctionAddresses() {
		return
			(glVertexAttribDivisorARB = GLContext.getFunctionAddress("glVertexAttribDivisorARB")) != 0;
	}

	private boolean ARB_internalformat_query_initNativeFunctionAddresses() {
		return
			(glGetInternalformativ = GLContext.getFunctionAddress("glGetInternalformativ")) != 0;
	}

	private boolean ARB_internalformat_query2_initNativeFunctionAddresses() {
		return
			(glGetInternalformati64v = GLContext.getFunctionAddress("glGetInternalformati64v")) != 0;
	}

	private boolean ARB_invalidate_subdata_initNativeFunctionAddresses() {
		return
			(glInvalidateTexSubImage = GLContext.getFunctionAddress("glInvalidateTexSubImage")) != 0 &
			(glInvalidateTexImage = GLContext.getFunctionAddress("glInvalidateTexImage")) != 0 &
			(glInvalidateBufferSubData = GLContext.getFunctionAddress("glInvalidateBufferSubData")) != 0 &
			(glInvalidateBufferData = GLContext.getFunctionAddress("glInvalidateBufferData")) != 0 &
			(glInvalidateFramebuffer = GLContext.getFunctionAddress("glInvalidateFramebuffer")) != 0 &
			(glInvalidateSubFramebuffer = GLContext.getFunctionAddress("glInvalidateSubFramebuffer")) != 0;
	}

	private boolean ARB_map_buffer_range_initNativeFunctionAddresses() {
		return
			(glMapBufferRange = GLContext.getFunctionAddress("glMapBufferRange")) != 0 &
			(glFlushMappedBufferRange = GLContext.getFunctionAddress("glFlushMappedBufferRange")) != 0;
	}

	private boolean ARB_matrix_palette_initNativeFunctionAddresses() {
		return
			(glCurrentPaletteMatrixARB = GLContext.getFunctionAddress("glCurrentPaletteMatrixARB")) != 0 &
			(glMatrixIndexPointerARB = GLContext.getFunctionAddress("glMatrixIndexPointerARB")) != 0 &
			(glMatrixIndexubvARB = GLContext.getFunctionAddress("glMatrixIndexubvARB")) != 0 &
			(glMatrixIndexusvARB = GLContext.getFunctionAddress("glMatrixIndexusvARB")) != 0 &
			(glMatrixIndexuivARB = GLContext.getFunctionAddress("glMatrixIndexuivARB")) != 0;
	}

	private boolean ARB_multi_draw_indirect_initNativeFunctionAddresses() {
		return
			(glMultiDrawArraysIndirect = GLContext.getFunctionAddress("glMultiDrawArraysIndirect")) != 0 &
			(glMultiDrawElementsIndirect = GLContext.getFunctionAddress("glMultiDrawElementsIndirect")) != 0;
	}

	private boolean ARB_multisample_initNativeFunctionAddresses() {
		return
			(glSampleCoverageARB = GLContext.getFunctionAddress("glSampleCoverageARB")) != 0;
	}

	private boolean ARB_multitexture_initNativeFunctionAddresses() {
		return
			(glClientActiveTextureARB = GLContext.getFunctionAddress("glClientActiveTextureARB")) != 0 &
			(glActiveTextureARB = GLContext.getFunctionAddress("glActiveTextureARB")) != 0 &
			(glMultiTexCoord1fARB = GLContext.getFunctionAddress("glMultiTexCoord1fARB")) != 0 &
			(glMultiTexCoord1dARB = GLContext.getFunctionAddress("glMultiTexCoord1dARB")) != 0 &
			(glMultiTexCoord1iARB = GLContext.getFunctionAddress("glMultiTexCoord1iARB")) != 0 &
			(glMultiTexCoord1sARB = GLContext.getFunctionAddress("glMultiTexCoord1sARB")) != 0 &
			(glMultiTexCoord2fARB = GLContext.getFunctionAddress("glMultiTexCoord2fARB")) != 0 &
			(glMultiTexCoord2dARB = GLContext.getFunctionAddress("glMultiTexCoord2dARB")) != 0 &
			(glMultiTexCoord2iARB = GLContext.getFunctionAddress("glMultiTexCoord2iARB")) != 0 &
			(glMultiTexCoord2sARB = GLContext.getFunctionAddress("glMultiTexCoord2sARB")) != 0 &
			(glMultiTexCoord3fARB = GLContext.getFunctionAddress("glMultiTexCoord3fARB")) != 0 &
			(glMultiTexCoord3dARB = GLContext.getFunctionAddress("glMultiTexCoord3dARB")) != 0 &
			(glMultiTexCoord3iARB = GLContext.getFunctionAddress("glMultiTexCoord3iARB")) != 0 &
			(glMultiTexCoord3sARB = GLContext.getFunctionAddress("glMultiTexCoord3sARB")) != 0 &
			(glMultiTexCoord4fARB = GLContext.getFunctionAddress("glMultiTexCoord4fARB")) != 0 &
			(glMultiTexCoord4dARB = GLContext.getFunctionAddress("glMultiTexCoord4dARB")) != 0 &
			(glMultiTexCoord4iARB = GLContext.getFunctionAddress("glMultiTexCoord4iARB")) != 0 &
			(glMultiTexCoord4sARB = GLContext.getFunctionAddress("glMultiTexCoord4sARB")) != 0;
	}

	private boolean ARB_occlusion_query_initNativeFunctionAddresses() {
		return
			(glGenQueriesARB = GLContext.getFunctionAddress("glGenQueriesARB")) != 0 &
			(glDeleteQueriesARB = GLContext.getFunctionAddress("glDeleteQueriesARB")) != 0 &
			(glIsQueryARB = GLContext.getFunctionAddress("glIsQueryARB")) != 0 &
			(glBeginQueryARB = GLContext.getFunctionAddress("glBeginQueryARB")) != 0 &
			(glEndQueryARB = GLContext.getFunctionAddress("glEndQueryARB")) != 0 &
			(glGetQueryivARB = GLContext.getFunctionAddress("glGetQueryivARB")) != 0 &
			(glGetQueryObjectivARB = GLContext.getFunctionAddress("glGetQueryObjectivARB")) != 0 &
			(glGetQueryObjectuivARB = GLContext.getFunctionAddress("glGetQueryObjectuivARB")) != 0;
	}

	private boolean ARB_point_parameters_initNativeFunctionAddresses() {
		return
			(glPointParameterfARB = GLContext.getFunctionAddress("glPointParameterfARB")) != 0 &
			(glPointParameterfvARB = GLContext.getFunctionAddress("glPointParameterfvARB")) != 0;
	}

	private boolean ARB_program_initNativeFunctionAddresses() {
		return
			(glProgramStringARB = GLContext.getFunctionAddress("glProgramStringARB")) != 0 &
			(glBindProgramARB = GLContext.getFunctionAddress("glBindProgramARB")) != 0 &
			(glDeleteProgramsARB = GLContext.getFunctionAddress("glDeleteProgramsARB")) != 0 &
			(glGenProgramsARB = GLContext.getFunctionAddress("glGenProgramsARB")) != 0 &
			(glProgramEnvParameter4fARB = GLContext.getFunctionAddress("glProgramEnvParameter4fARB")) != 0 &
			(glProgramEnvParameter4dARB = GLContext.getFunctionAddress("glProgramEnvParameter4dARB")) != 0 &
			(glProgramEnvParameter4fvARB = GLContext.getFunctionAddress("glProgramEnvParameter4fvARB")) != 0 &
			(glProgramEnvParameter4dvARB = GLContext.getFunctionAddress("glProgramEnvParameter4dvARB")) != 0 &
			(glProgramLocalParameter4fARB = GLContext.getFunctionAddress("glProgramLocalParameter4fARB")) != 0 &
			(glProgramLocalParameter4dARB = GLContext.getFunctionAddress("glProgramLocalParameter4dARB")) != 0 &
			(glProgramLocalParameter4fvARB = GLContext.getFunctionAddress("glProgramLocalParameter4fvARB")) != 0 &
			(glProgramLocalParameter4dvARB = GLContext.getFunctionAddress("glProgramLocalParameter4dvARB")) != 0 &
			(glGetProgramEnvParameterfvARB = GLContext.getFunctionAddress("glGetProgramEnvParameterfvARB")) != 0 &
			(glGetProgramEnvParameterdvARB = GLContext.getFunctionAddress("glGetProgramEnvParameterdvARB")) != 0 &
			(glGetProgramLocalParameterfvARB = GLContext.getFunctionAddress("glGetProgramLocalParameterfvARB")) != 0 &
			(glGetProgramLocalParameterdvARB = GLContext.getFunctionAddress("glGetProgramLocalParameterdvARB")) != 0 &
			(glGetProgramivARB = GLContext.getFunctionAddress("glGetProgramivARB")) != 0 &
			(glGetProgramStringARB = GLContext.getFunctionAddress("glGetProgramStringARB")) != 0 &
			(glIsProgramARB = GLContext.getFunctionAddress("glIsProgramARB")) != 0;
	}

	private boolean ARB_program_interface_query_initNativeFunctionAddresses() {
		return
			(glGetProgramInterfaceiv = GLContext.getFunctionAddress("glGetProgramInterfaceiv")) != 0 &
			(glGetProgramResourceIndex = GLContext.getFunctionAddress("glGetProgramResourceIndex")) != 0 &
			(glGetProgramResourceName = GLContext.getFunctionAddress("glGetProgramResourceName")) != 0 &
			(glGetProgramResourceiv = GLContext.getFunctionAddress("glGetProgramResourceiv")) != 0 &
			(glGetProgramResourceLocation = GLContext.getFunctionAddress("glGetProgramResourceLocation")) != 0 &
			(glGetProgramResourceLocationIndex = GLContext.getFunctionAddress("glGetProgramResourceLocationIndex")) != 0;
	}

	private boolean ARB_provoking_vertex_initNativeFunctionAddresses() {
		return
			(glProvokingVertex = GLContext.getFunctionAddress("glProvokingVertex")) != 0;
	}

	private boolean ARB_robustness_initNativeFunctionAddresses(boolean forwardCompatible,Set<String> supported_extensions) {
		return
			(glGetGraphicsResetStatusARB = GLContext.getFunctionAddress("glGetGraphicsResetStatusARB")) != 0 &
			(forwardCompatible || (glGetnMapdvARB = GLContext.getFunctionAddress("glGetnMapdvARB")) != 0) &
			(forwardCompatible || (glGetnMapfvARB = GLContext.getFunctionAddress("glGetnMapfvARB")) != 0) &
			(forwardCompatible || (glGetnMapivARB = GLContext.getFunctionAddress("glGetnMapivARB")) != 0) &
			(forwardCompatible || (glGetnPixelMapfvARB = GLContext.getFunctionAddress("glGetnPixelMapfvARB")) != 0) &
			(forwardCompatible || (glGetnPixelMapuivARB = GLContext.getFunctionAddress("glGetnPixelMapuivARB")) != 0) &
			(forwardCompatible || (glGetnPixelMapusvARB = GLContext.getFunctionAddress("glGetnPixelMapusvARB")) != 0) &
			(forwardCompatible || (glGetnPolygonStippleARB = GLContext.getFunctionAddress("glGetnPolygonStippleARB")) != 0) &
			(glGetnTexImageARB = GLContext.getFunctionAddress("glGetnTexImageARB")) != 0 &
			(glReadnPixelsARB = GLContext.getFunctionAddress("glReadnPixelsARB")) != 0 &
			(!supported_extensions.contains("GL_ARB_imaging") || (glGetnColorTableARB = GLContext.getFunctionAddress("glGetnColorTableARB")) != 0) &
			(!supported_extensions.contains("GL_ARB_imaging") || (glGetnConvolutionFilterARB = GLContext.getFunctionAddress("glGetnConvolutionFilterARB")) != 0) &
			(!supported_extensions.contains("GL_ARB_imaging") || (glGetnSeparableFilterARB = GLContext.getFunctionAddress("glGetnSeparableFilterARB")) != 0) &
			(!supported_extensions.contains("GL_ARB_imaging") || (glGetnHistogramARB = GLContext.getFunctionAddress("glGetnHistogramARB")) != 0) &
			(!supported_extensions.contains("GL_ARB_imaging") || (glGetnMinmaxARB = GLContext.getFunctionAddress("glGetnMinmaxARB")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetnCompressedTexImageARB = GLContext.getFunctionAddress("glGetnCompressedTexImageARB")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glGetnUniformfvARB = GLContext.getFunctionAddress("glGetnUniformfvARB")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glGetnUniformivARB = GLContext.getFunctionAddress("glGetnUniformivARB")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glGetnUniformuivARB = GLContext.getFunctionAddress("glGetnUniformuivARB")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glGetnUniformdvARB = GLContext.getFunctionAddress("glGetnUniformdvARB")) != 0);
	}

	private boolean ARB_sample_shading_initNativeFunctionAddresses() {
		return
			(glMinSampleShadingARB = GLContext.getFunctionAddress("glMinSampleShadingARB")) != 0;
	}

	private boolean ARB_sampler_objects_initNativeFunctionAddresses() {
		return
			(glGenSamplers = GLContext.getFunctionAddress("glGenSamplers")) != 0 &
			(glDeleteSamplers = GLContext.getFunctionAddress("glDeleteSamplers")) != 0 &
			(glIsSampler = GLContext.getFunctionAddress("glIsSampler")) != 0 &
			(glBindSampler = GLContext.getFunctionAddress("glBindSampler")) != 0 &
			(glSamplerParameteri = GLContext.getFunctionAddress("glSamplerParameteri")) != 0 &
			(glSamplerParameterf = GLContext.getFunctionAddress("glSamplerParameterf")) != 0 &
			(glSamplerParameteriv = GLContext.getFunctionAddress("glSamplerParameteriv")) != 0 &
			(glSamplerParameterfv = GLContext.getFunctionAddress("glSamplerParameterfv")) != 0 &
			(glSamplerParameterIiv = GLContext.getFunctionAddress("glSamplerParameterIiv")) != 0 &
			(glSamplerParameterIuiv = GLContext.getFunctionAddress("glSamplerParameterIuiv")) != 0 &
			(glGetSamplerParameteriv = GLContext.getFunctionAddress("glGetSamplerParameteriv")) != 0 &
			(glGetSamplerParameterfv = GLContext.getFunctionAddress("glGetSamplerParameterfv")) != 0 &
			(glGetSamplerParameterIiv = GLContext.getFunctionAddress("glGetSamplerParameterIiv")) != 0 &
			(glGetSamplerParameterIuiv = GLContext.getFunctionAddress("glGetSamplerParameterIuiv")) != 0;
	}

	private boolean ARB_separate_shader_objects_initNativeFunctionAddresses() {
		return
			(glUseProgramStages = GLContext.getFunctionAddress("glUseProgramStages")) != 0 &
			(glActiveShaderProgram = GLContext.getFunctionAddress("glActiveShaderProgram")) != 0 &
			(glCreateShaderProgramv = GLContext.getFunctionAddress("glCreateShaderProgramv")) != 0 &
			(glBindProgramPipeline = GLContext.getFunctionAddress("glBindProgramPipeline")) != 0 &
			(glDeleteProgramPipelines = GLContext.getFunctionAddress("glDeleteProgramPipelines")) != 0 &
			(glGenProgramPipelines = GLContext.getFunctionAddress("glGenProgramPipelines")) != 0 &
			(glIsProgramPipeline = GLContext.getFunctionAddress("glIsProgramPipeline")) != 0 &
			(glProgramParameteri = GLContext.getFunctionAddress("glProgramParameteri")) != 0 &
			(glGetProgramPipelineiv = GLContext.getFunctionAddress("glGetProgramPipelineiv")) != 0 &
			(glProgramUniform1i = GLContext.getFunctionAddress("glProgramUniform1i")) != 0 &
			(glProgramUniform2i = GLContext.getFunctionAddress("glProgramUniform2i")) != 0 &
			(glProgramUniform3i = GLContext.getFunctionAddress("glProgramUniform3i")) != 0 &
			(glProgramUniform4i = GLContext.getFunctionAddress("glProgramUniform4i")) != 0 &
			(glProgramUniform1f = GLContext.getFunctionAddress("glProgramUniform1f")) != 0 &
			(glProgramUniform2f = GLContext.getFunctionAddress("glProgramUniform2f")) != 0 &
			(glProgramUniform3f = GLContext.getFunctionAddress("glProgramUniform3f")) != 0 &
			(glProgramUniform4f = GLContext.getFunctionAddress("glProgramUniform4f")) != 0 &
			(glProgramUniform1d = GLContext.getFunctionAddress("glProgramUniform1d")) != 0 &
			(glProgramUniform2d = GLContext.getFunctionAddress("glProgramUniform2d")) != 0 &
			(glProgramUniform3d = GLContext.getFunctionAddress("glProgramUniform3d")) != 0 &
			(glProgramUniform4d = GLContext.getFunctionAddress("glProgramUniform4d")) != 0 &
			(glProgramUniform1iv = GLContext.getFunctionAddress("glProgramUniform1iv")) != 0 &
			(glProgramUniform2iv = GLContext.getFunctionAddress("glProgramUniform2iv")) != 0 &
			(glProgramUniform3iv = GLContext.getFunctionAddress("glProgramUniform3iv")) != 0 &
			(glProgramUniform4iv = GLContext.getFunctionAddress("glProgramUniform4iv")) != 0 &
			(glProgramUniform1fv = GLContext.getFunctionAddress("glProgramUniform1fv")) != 0 &
			(glProgramUniform2fv = GLContext.getFunctionAddress("glProgramUniform2fv")) != 0 &
			(glProgramUniform3fv = GLContext.getFunctionAddress("glProgramUniform3fv")) != 0 &
			(glProgramUniform4fv = GLContext.getFunctionAddress("glProgramUniform4fv")) != 0 &
			(glProgramUniform1dv = GLContext.getFunctionAddress("glProgramUniform1dv")) != 0 &
			(glProgramUniform2dv = GLContext.getFunctionAddress("glProgramUniform2dv")) != 0 &
			(glProgramUniform3dv = GLContext.getFunctionAddress("glProgramUniform3dv")) != 0 &
			(glProgramUniform4dv = GLContext.getFunctionAddress("glProgramUniform4dv")) != 0 &
			(glProgramUniform1ui = GLContext.getFunctionAddress("glProgramUniform1ui")) != 0 &
			(glProgramUniform2ui = GLContext.getFunctionAddress("glProgramUniform2ui")) != 0 &
			(glProgramUniform3ui = GLContext.getFunctionAddress("glProgramUniform3ui")) != 0 &
			(glProgramUniform4ui = GLContext.getFunctionAddress("glProgramUniform4ui")) != 0 &
			(glProgramUniform1uiv = GLContext.getFunctionAddress("glProgramUniform1uiv")) != 0 &
			(glProgramUniform2uiv = GLContext.getFunctionAddress("glProgramUniform2uiv")) != 0 &
			(glProgramUniform3uiv = GLContext.getFunctionAddress("glProgramUniform3uiv")) != 0 &
			(glProgramUniform4uiv = GLContext.getFunctionAddress("glProgramUniform4uiv")) != 0 &
			(glProgramUniformMatrix2fv = GLContext.getFunctionAddress("glProgramUniformMatrix2fv")) != 0 &
			(glProgramUniformMatrix3fv = GLContext.getFunctionAddress("glProgramUniformMatrix3fv")) != 0 &
			(glProgramUniformMatrix4fv = GLContext.getFunctionAddress("glProgramUniformMatrix4fv")) != 0 &
			(glProgramUniformMatrix2dv = GLContext.getFunctionAddress("glProgramUniformMatrix2dv")) != 0 &
			(glProgramUniformMatrix3dv = GLContext.getFunctionAddress("glProgramUniformMatrix3dv")) != 0 &
			(glProgramUniformMatrix4dv = GLContext.getFunctionAddress("glProgramUniformMatrix4dv")) != 0 &
			(glProgramUniformMatrix2x3fv = GLContext.getFunctionAddress("glProgramUniformMatrix2x3fv")) != 0 &
			(glProgramUniformMatrix3x2fv = GLContext.getFunctionAddress("glProgramUniformMatrix3x2fv")) != 0 &
			(glProgramUniformMatrix2x4fv = GLContext.getFunctionAddress("glProgramUniformMatrix2x4fv")) != 0 &
			(glProgramUniformMatrix4x2fv = GLContext.getFunctionAddress("glProgramUniformMatrix4x2fv")) != 0 &
			(glProgramUniformMatrix3x4fv = GLContext.getFunctionAddress("glProgramUniformMatrix3x4fv")) != 0 &
			(glProgramUniformMatrix4x3fv = GLContext.getFunctionAddress("glProgramUniformMatrix4x3fv")) != 0 &
			(glProgramUniformMatrix2x3dv = GLContext.getFunctionAddress("glProgramUniformMatrix2x3dv")) != 0 &
			(glProgramUniformMatrix3x2dv = GLContext.getFunctionAddress("glProgramUniformMatrix3x2dv")) != 0 &
			(glProgramUniformMatrix2x4dv = GLContext.getFunctionAddress("glProgramUniformMatrix2x4dv")) != 0 &
			(glProgramUniformMatrix4x2dv = GLContext.getFunctionAddress("glProgramUniformMatrix4x2dv")) != 0 &
			(glProgramUniformMatrix3x4dv = GLContext.getFunctionAddress("glProgramUniformMatrix3x4dv")) != 0 &
			(glProgramUniformMatrix4x3dv = GLContext.getFunctionAddress("glProgramUniformMatrix4x3dv")) != 0 &
			(glValidateProgramPipeline = GLContext.getFunctionAddress("glValidateProgramPipeline")) != 0 &
			(glGetProgramPipelineInfoLog = GLContext.getFunctionAddress("glGetProgramPipelineInfoLog")) != 0;
	}

	private boolean ARB_shader_atomic_counters_initNativeFunctionAddresses() {
		return
			(glGetActiveAtomicCounterBufferiv = GLContext.getFunctionAddress("glGetActiveAtomicCounterBufferiv")) != 0;
	}

	private boolean ARB_shader_image_load_store_initNativeFunctionAddresses() {
		return
			(glBindImageTexture = GLContext.getFunctionAddress("glBindImageTexture")) != 0 &
			(glMemoryBarrier = GLContext.getFunctionAddress("glMemoryBarrier")) != 0;
	}

	private boolean ARB_shader_objects_initNativeFunctionAddresses() {
		return
			(glDeleteObjectARB = GLContext.getFunctionAddress("glDeleteObjectARB")) != 0 &
			(glGetHandleARB = GLContext.getFunctionAddress("glGetHandleARB")) != 0 &
			(glDetachObjectARB = GLContext.getFunctionAddress("glDetachObjectARB")) != 0 &
			(glCreateShaderObjectARB = GLContext.getFunctionAddress("glCreateShaderObjectARB")) != 0 &
			(glShaderSourceARB = GLContext.getFunctionAddress("glShaderSourceARB")) != 0 &
			(glCompileShaderARB = GLContext.getFunctionAddress("glCompileShaderARB")) != 0 &
			(glCreateProgramObjectARB = GLContext.getFunctionAddress("glCreateProgramObjectARB")) != 0 &
			(glAttachObjectARB = GLContext.getFunctionAddress("glAttachObjectARB")) != 0 &
			(glLinkProgramARB = GLContext.getFunctionAddress("glLinkProgramARB")) != 0 &
			(glUseProgramObjectARB = GLContext.getFunctionAddress("glUseProgramObjectARB")) != 0 &
			(glValidateProgramARB = GLContext.getFunctionAddress("glValidateProgramARB")) != 0 &
			(glUniform1fARB = GLContext.getFunctionAddress("glUniform1fARB")) != 0 &
			(glUniform2fARB = GLContext.getFunctionAddress("glUniform2fARB")) != 0 &
			(glUniform3fARB = GLContext.getFunctionAddress("glUniform3fARB")) != 0 &
			(glUniform4fARB = GLContext.getFunctionAddress("glUniform4fARB")) != 0 &
			(glUniform1iARB = GLContext.getFunctionAddress("glUniform1iARB")) != 0 &
			(glUniform2iARB = GLContext.getFunctionAddress("glUniform2iARB")) != 0 &
			(glUniform3iARB = GLContext.getFunctionAddress("glUniform3iARB")) != 0 &
			(glUniform4iARB = GLContext.getFunctionAddress("glUniform4iARB")) != 0 &
			(glUniform1fvARB = GLContext.getFunctionAddress("glUniform1fvARB")) != 0 &
			(glUniform2fvARB = GLContext.getFunctionAddress("glUniform2fvARB")) != 0 &
			(glUniform3fvARB = GLContext.getFunctionAddress("glUniform3fvARB")) != 0 &
			(glUniform4fvARB = GLContext.getFunctionAddress("glUniform4fvARB")) != 0 &
			(glUniform1ivARB = GLContext.getFunctionAddress("glUniform1ivARB")) != 0 &
			(glUniform2ivARB = GLContext.getFunctionAddress("glUniform2ivARB")) != 0 &
			(glUniform3ivARB = GLContext.getFunctionAddress("glUniform3ivARB")) != 0 &
			(glUniform4ivARB = GLContext.getFunctionAddress("glUniform4ivARB")) != 0 &
			(glUniformMatrix2fvARB = GLContext.getFunctionAddress("glUniformMatrix2fvARB")) != 0 &
			(glUniformMatrix3fvARB = GLContext.getFunctionAddress("glUniformMatrix3fvARB")) != 0 &
			(glUniformMatrix4fvARB = GLContext.getFunctionAddress("glUniformMatrix4fvARB")) != 0 &
			(glGetObjectParameterfvARB = GLContext.getFunctionAddress("glGetObjectParameterfvARB")) != 0 &
			(glGetObjectParameterivARB = GLContext.getFunctionAddress("glGetObjectParameterivARB")) != 0 &
			(glGetInfoLogARB = GLContext.getFunctionAddress("glGetInfoLogARB")) != 0 &
			(glGetAttachedObjectsARB = GLContext.getFunctionAddress("glGetAttachedObjectsARB")) != 0 &
			(glGetUniformLocationARB = GLContext.getFunctionAddress("glGetUniformLocationARB")) != 0 &
			(glGetActiveUniformARB = GLContext.getFunctionAddress("glGetActiveUniformARB")) != 0 &
			(glGetUniformfvARB = GLContext.getFunctionAddress("glGetUniformfvARB")) != 0 &
			(glGetUniformivARB = GLContext.getFunctionAddress("glGetUniformivARB")) != 0 &
			(glGetShaderSourceARB = GLContext.getFunctionAddress("glGetShaderSourceARB")) != 0;
	}

	private boolean ARB_shader_storage_buffer_object_initNativeFunctionAddresses() {
		return
			(glShaderStorageBlockBinding = GLContext.getFunctionAddress("glShaderStorageBlockBinding")) != 0;
	}

	private boolean ARB_shader_subroutine_initNativeFunctionAddresses() {
		return
			(glGetSubroutineUniformLocation = GLContext.getFunctionAddress("glGetSubroutineUniformLocation")) != 0 &
			(glGetSubroutineIndex = GLContext.getFunctionAddress("glGetSubroutineIndex")) != 0 &
			(glGetActiveSubroutineUniformiv = GLContext.getFunctionAddress("glGetActiveSubroutineUniformiv")) != 0 &
			(glGetActiveSubroutineUniformName = GLContext.getFunctionAddress("glGetActiveSubroutineUniformName")) != 0 &
			(glGetActiveSubroutineName = GLContext.getFunctionAddress("glGetActiveSubroutineName")) != 0 &
			(glUniformSubroutinesuiv = GLContext.getFunctionAddress("glUniformSubroutinesuiv")) != 0 &
			(glGetUniformSubroutineuiv = GLContext.getFunctionAddress("glGetUniformSubroutineuiv")) != 0 &
			(glGetProgramStageiv = GLContext.getFunctionAddress("glGetProgramStageiv")) != 0;
	}

	private boolean ARB_shading_language_include_initNativeFunctionAddresses() {
		return
			(glNamedStringARB = GLContext.getFunctionAddress("glNamedStringARB")) != 0 &
			(glDeleteNamedStringARB = GLContext.getFunctionAddress("glDeleteNamedStringARB")) != 0 &
			(glCompileShaderIncludeARB = GLContext.getFunctionAddress("glCompileShaderIncludeARB")) != 0 &
			(glIsNamedStringARB = GLContext.getFunctionAddress("glIsNamedStringARB")) != 0 &
			(glGetNamedStringARB = GLContext.getFunctionAddress("glGetNamedStringARB")) != 0 &
			(glGetNamedStringivARB = GLContext.getFunctionAddress("glGetNamedStringivARB")) != 0;
	}

	private boolean ARB_sync_initNativeFunctionAddresses() {
		return
			(glFenceSync = GLContext.getFunctionAddress("glFenceSync")) != 0 &
			(glIsSync = GLContext.getFunctionAddress("glIsSync")) != 0 &
			(glDeleteSync = GLContext.getFunctionAddress("glDeleteSync")) != 0 &
			(glClientWaitSync = GLContext.getFunctionAddress("glClientWaitSync")) != 0 &
			(glWaitSync = GLContext.getFunctionAddress("glWaitSync")) != 0 &
			(glGetInteger64v = GLContext.getFunctionAddress("glGetInteger64v")) != 0 &
			(glGetSynciv = GLContext.getFunctionAddress("glGetSynciv")) != 0;
	}

	private boolean ARB_tessellation_shader_initNativeFunctionAddresses() {
		return
			(glPatchParameteri = GLContext.getFunctionAddress("glPatchParameteri")) != 0 &
			(glPatchParameterfv = GLContext.getFunctionAddress("glPatchParameterfv")) != 0;
	}

	private boolean ARB_texture_buffer_object_initNativeFunctionAddresses() {
		return
			(glTexBufferARB = GLContext.getFunctionAddress("glTexBufferARB")) != 0;
	}

	private boolean ARB_texture_buffer_range_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glTexBufferRange = GLContext.getFunctionAddress("glTexBufferRange")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glTextureBufferRangeEXT = GLContext.getFunctionAddress("glTextureBufferRangeEXT")) != 0);
	}

	private boolean ARB_texture_compression_initNativeFunctionAddresses() {
		return
			(glCompressedTexImage1DARB = GLContext.getFunctionAddress("glCompressedTexImage1DARB")) != 0 &
			(glCompressedTexImage2DARB = GLContext.getFunctionAddress("glCompressedTexImage2DARB")) != 0 &
			(glCompressedTexImage3DARB = GLContext.getFunctionAddress("glCompressedTexImage3DARB")) != 0 &
			(glCompressedTexSubImage1DARB = GLContext.getFunctionAddress("glCompressedTexSubImage1DARB")) != 0 &
			(glCompressedTexSubImage2DARB = GLContext.getFunctionAddress("glCompressedTexSubImage2DARB")) != 0 &
			(glCompressedTexSubImage3DARB = GLContext.getFunctionAddress("glCompressedTexSubImage3DARB")) != 0 &
			(glGetCompressedTexImageARB = GLContext.getFunctionAddress("glGetCompressedTexImageARB")) != 0;
	}

	private boolean ARB_texture_multisample_initNativeFunctionAddresses() {
		return
			(glTexImage2DMultisample = GLContext.getFunctionAddress("glTexImage2DMultisample")) != 0 &
			(glTexImage3DMultisample = GLContext.getFunctionAddress("glTexImage3DMultisample")) != 0 &
			(glGetMultisamplefv = GLContext.getFunctionAddress("glGetMultisamplefv")) != 0 &
			(glSampleMaski = GLContext.getFunctionAddress("glSampleMaski")) != 0;
	}

	private boolean ARB_texture_storage_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glTexStorage1D = GLContext.getFunctionAddress(new String[] {"glTexStorage1D","glTexStorage1DEXT"})) != 0 &
			(glTexStorage2D = GLContext.getFunctionAddress(new String[] {"glTexStorage2D","glTexStorage2DEXT"})) != 0 &
			(glTexStorage3D = GLContext.getFunctionAddress(new String[] {"glTexStorage3D","glTexStorage3DEXT"})) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glTextureStorage1DEXT = GLContext.getFunctionAddress(new String[] {"glTextureStorage1DEXT","glTextureStorage1DEXTEXT"})) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glTextureStorage2DEXT = GLContext.getFunctionAddress(new String[] {"glTextureStorage2DEXT","glTextureStorage2DEXTEXT"})) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glTextureStorage3DEXT = GLContext.getFunctionAddress(new String[] {"glTextureStorage3DEXT","glTextureStorage3DEXTEXT"})) != 0);
	}

	private boolean ARB_texture_storage_multisample_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glTexStorage2DMultisample = GLContext.getFunctionAddress("glTexStorage2DMultisample")) != 0 &
			(glTexStorage3DMultisample = GLContext.getFunctionAddress("glTexStorage3DMultisample")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glTextureStorage2DMultisampleEXT = GLContext.getFunctionAddress("glTextureStorage2DMultisampleEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glTextureStorage3DMultisampleEXT = GLContext.getFunctionAddress("glTextureStorage3DMultisampleEXT")) != 0);
	}

	private boolean ARB_texture_view_initNativeFunctionAddresses() {
		return
			(glTextureView = GLContext.getFunctionAddress("glTextureView")) != 0;
	}

	private boolean ARB_timer_query_initNativeFunctionAddresses() {
		return
			(glQueryCounter = GLContext.getFunctionAddress("glQueryCounter")) != 0 &
			(glGetQueryObjecti64v = GLContext.getFunctionAddress("glGetQueryObjecti64v")) != 0 &
			(glGetQueryObjectui64v = GLContext.getFunctionAddress("glGetQueryObjectui64v")) != 0;
	}

	private boolean ARB_transform_feedback2_initNativeFunctionAddresses() {
		return
			(glBindTransformFeedback = GLContext.getFunctionAddress("glBindTransformFeedback")) != 0 &
			(glDeleteTransformFeedbacks = GLContext.getFunctionAddress("glDeleteTransformFeedbacks")) != 0 &
			(glGenTransformFeedbacks = GLContext.getFunctionAddress("glGenTransformFeedbacks")) != 0 &
			(glIsTransformFeedback = GLContext.getFunctionAddress("glIsTransformFeedback")) != 0 &
			(glPauseTransformFeedback = GLContext.getFunctionAddress("glPauseTransformFeedback")) != 0 &
			(glResumeTransformFeedback = GLContext.getFunctionAddress("glResumeTransformFeedback")) != 0 &
			(glDrawTransformFeedback = GLContext.getFunctionAddress("glDrawTransformFeedback")) != 0;
	}

	private boolean ARB_transform_feedback3_initNativeFunctionAddresses() {
		return
			(glDrawTransformFeedbackStream = GLContext.getFunctionAddress("glDrawTransformFeedbackStream")) != 0 &
			(glBeginQueryIndexed = GLContext.getFunctionAddress("glBeginQueryIndexed")) != 0 &
			(glEndQueryIndexed = GLContext.getFunctionAddress("glEndQueryIndexed")) != 0 &
			(glGetQueryIndexediv = GLContext.getFunctionAddress("glGetQueryIndexediv")) != 0;
	}

	private boolean ARB_transform_feedback_instanced_initNativeFunctionAddresses() {
		return
			(glDrawTransformFeedbackInstanced = GLContext.getFunctionAddress("glDrawTransformFeedbackInstanced")) != 0 &
			(glDrawTransformFeedbackStreamInstanced = GLContext.getFunctionAddress("glDrawTransformFeedbackStreamInstanced")) != 0;
	}

	private boolean ARB_transpose_matrix_initNativeFunctionAddresses() {
		return
			(glLoadTransposeMatrixfARB = GLContext.getFunctionAddress("glLoadTransposeMatrixfARB")) != 0 &
			(glMultTransposeMatrixfARB = GLContext.getFunctionAddress("glMultTransposeMatrixfARB")) != 0;
	}

	private boolean ARB_uniform_buffer_object_initNativeFunctionAddresses() {
		return
			(glGetUniformIndices = GLContext.getFunctionAddress("glGetUniformIndices")) != 0 &
			(glGetActiveUniformsiv = GLContext.getFunctionAddress("glGetActiveUniformsiv")) != 0 &
			(glGetActiveUniformName = GLContext.getFunctionAddress("glGetActiveUniformName")) != 0 &
			(glGetUniformBlockIndex = GLContext.getFunctionAddress("glGetUniformBlockIndex")) != 0 &
			(glGetActiveUniformBlockiv = GLContext.getFunctionAddress("glGetActiveUniformBlockiv")) != 0 &
			(glGetActiveUniformBlockName = GLContext.getFunctionAddress("glGetActiveUniformBlockName")) != 0 &
			(glBindBufferRange = GLContext.getFunctionAddress("glBindBufferRange")) != 0 &
			(glBindBufferBase = GLContext.getFunctionAddress("glBindBufferBase")) != 0 &
			(glGetIntegeri_v = GLContext.getFunctionAddress("glGetIntegeri_v")) != 0 &
			(glUniformBlockBinding = GLContext.getFunctionAddress("glUniformBlockBinding")) != 0;
	}

	private boolean ARB_vertex_array_object_initNativeFunctionAddresses() {
		return
			(glBindVertexArray = GLContext.getFunctionAddress("glBindVertexArray")) != 0 &
			(glDeleteVertexArrays = GLContext.getFunctionAddress("glDeleteVertexArrays")) != 0 &
			(glGenVertexArrays = GLContext.getFunctionAddress("glGenVertexArrays")) != 0 &
			(glIsVertexArray = GLContext.getFunctionAddress("glIsVertexArray")) != 0;
	}

	private boolean ARB_vertex_attrib_64bit_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glVertexAttribL1d = GLContext.getFunctionAddress("glVertexAttribL1d")) != 0 &
			(glVertexAttribL2d = GLContext.getFunctionAddress("glVertexAttribL2d")) != 0 &
			(glVertexAttribL3d = GLContext.getFunctionAddress("glVertexAttribL3d")) != 0 &
			(glVertexAttribL4d = GLContext.getFunctionAddress("glVertexAttribL4d")) != 0 &
			(glVertexAttribL1dv = GLContext.getFunctionAddress("glVertexAttribL1dv")) != 0 &
			(glVertexAttribL2dv = GLContext.getFunctionAddress("glVertexAttribL2dv")) != 0 &
			(glVertexAttribL3dv = GLContext.getFunctionAddress("glVertexAttribL3dv")) != 0 &
			(glVertexAttribL4dv = GLContext.getFunctionAddress("glVertexAttribL4dv")) != 0 &
			(glVertexAttribLPointer = GLContext.getFunctionAddress("glVertexAttribLPointer")) != 0 &
			(glGetVertexAttribLdv = GLContext.getFunctionAddress("glGetVertexAttribLdv")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glVertexArrayVertexAttribLOffsetEXT = GLContext.getFunctionAddress("glVertexArrayVertexAttribLOffsetEXT")) != 0);
	}

	private boolean ARB_vertex_attrib_binding_initNativeFunctionAddresses() {
		return
			(glBindVertexBuffer = GLContext.getFunctionAddress("glBindVertexBuffer")) != 0 &
			(glVertexAttribFormat = GLContext.getFunctionAddress("glVertexAttribFormat")) != 0 &
			(glVertexAttribIFormat = GLContext.getFunctionAddress("glVertexAttribIFormat")) != 0 &
			(glVertexAttribLFormat = GLContext.getFunctionAddress("glVertexAttribLFormat")) != 0 &
			(glVertexAttribBinding = GLContext.getFunctionAddress("glVertexAttribBinding")) != 0 &
			(glVertexBindingDivisor = GLContext.getFunctionAddress("glVertexBindingDivisor")) != 0;
	}

	private boolean ARB_vertex_blend_initNativeFunctionAddresses() {
		return
			(glWeightbvARB = GLContext.getFunctionAddress("glWeightbvARB")) != 0 &
			(glWeightsvARB = GLContext.getFunctionAddress("glWeightsvARB")) != 0 &
			(glWeightivARB = GLContext.getFunctionAddress("glWeightivARB")) != 0 &
			(glWeightfvARB = GLContext.getFunctionAddress("glWeightfvARB")) != 0 &
			(glWeightdvARB = GLContext.getFunctionAddress("glWeightdvARB")) != 0 &
			(glWeightubvARB = GLContext.getFunctionAddress("glWeightubvARB")) != 0 &
			(glWeightusvARB = GLContext.getFunctionAddress("glWeightusvARB")) != 0 &
			(glWeightuivARB = GLContext.getFunctionAddress("glWeightuivARB")) != 0 &
			(glWeightPointerARB = GLContext.getFunctionAddress("glWeightPointerARB")) != 0 &
			(glVertexBlendARB = GLContext.getFunctionAddress("glVertexBlendARB")) != 0;
	}

	private boolean ARB_vertex_program_initNativeFunctionAddresses() {
		return
			(glVertexAttrib1sARB = GLContext.getFunctionAddress("glVertexAttrib1sARB")) != 0 &
			(glVertexAttrib1fARB = GLContext.getFunctionAddress("glVertexAttrib1fARB")) != 0 &
			(glVertexAttrib1dARB = GLContext.getFunctionAddress("glVertexAttrib1dARB")) != 0 &
			(glVertexAttrib2sARB = GLContext.getFunctionAddress("glVertexAttrib2sARB")) != 0 &
			(glVertexAttrib2fARB = GLContext.getFunctionAddress("glVertexAttrib2fARB")) != 0 &
			(glVertexAttrib2dARB = GLContext.getFunctionAddress("glVertexAttrib2dARB")) != 0 &
			(glVertexAttrib3sARB = GLContext.getFunctionAddress("glVertexAttrib3sARB")) != 0 &
			(glVertexAttrib3fARB = GLContext.getFunctionAddress("glVertexAttrib3fARB")) != 0 &
			(glVertexAttrib3dARB = GLContext.getFunctionAddress("glVertexAttrib3dARB")) != 0 &
			(glVertexAttrib4sARB = GLContext.getFunctionAddress("glVertexAttrib4sARB")) != 0 &
			(glVertexAttrib4fARB = GLContext.getFunctionAddress("glVertexAttrib4fARB")) != 0 &
			(glVertexAttrib4dARB = GLContext.getFunctionAddress("glVertexAttrib4dARB")) != 0 &
			(glVertexAttrib4NubARB = GLContext.getFunctionAddress("glVertexAttrib4NubARB")) != 0 &
			(glVertexAttribPointerARB = GLContext.getFunctionAddress("glVertexAttribPointerARB")) != 0 &
			(glEnableVertexAttribArrayARB = GLContext.getFunctionAddress("glEnableVertexAttribArrayARB")) != 0 &
			(glDisableVertexAttribArrayARB = GLContext.getFunctionAddress("glDisableVertexAttribArrayARB")) != 0 &
			(glGetVertexAttribfvARB = GLContext.getFunctionAddress("glGetVertexAttribfvARB")) != 0 &
			(glGetVertexAttribdvARB = GLContext.getFunctionAddress("glGetVertexAttribdvARB")) != 0 &
			(glGetVertexAttribivARB = GLContext.getFunctionAddress("glGetVertexAttribivARB")) != 0 &
			(glGetVertexAttribPointervARB = GLContext.getFunctionAddress("glGetVertexAttribPointervARB")) != 0;
	}

	private boolean ARB_vertex_shader_initNativeFunctionAddresses() {
		return
			(glVertexAttrib1sARB = GLContext.getFunctionAddress("glVertexAttrib1sARB")) != 0 &
			(glVertexAttrib1fARB = GLContext.getFunctionAddress("glVertexAttrib1fARB")) != 0 &
			(glVertexAttrib1dARB = GLContext.getFunctionAddress("glVertexAttrib1dARB")) != 0 &
			(glVertexAttrib2sARB = GLContext.getFunctionAddress("glVertexAttrib2sARB")) != 0 &
			(glVertexAttrib2fARB = GLContext.getFunctionAddress("glVertexAttrib2fARB")) != 0 &
			(glVertexAttrib2dARB = GLContext.getFunctionAddress("glVertexAttrib2dARB")) != 0 &
			(glVertexAttrib3sARB = GLContext.getFunctionAddress("glVertexAttrib3sARB")) != 0 &
			(glVertexAttrib3fARB = GLContext.getFunctionAddress("glVertexAttrib3fARB")) != 0 &
			(glVertexAttrib3dARB = GLContext.getFunctionAddress("glVertexAttrib3dARB")) != 0 &
			(glVertexAttrib4sARB = GLContext.getFunctionAddress("glVertexAttrib4sARB")) != 0 &
			(glVertexAttrib4fARB = GLContext.getFunctionAddress("glVertexAttrib4fARB")) != 0 &
			(glVertexAttrib4dARB = GLContext.getFunctionAddress("glVertexAttrib4dARB")) != 0 &
			(glVertexAttrib4NubARB = GLContext.getFunctionAddress("glVertexAttrib4NubARB")) != 0 &
			(glVertexAttribPointerARB = GLContext.getFunctionAddress("glVertexAttribPointerARB")) != 0 &
			(glEnableVertexAttribArrayARB = GLContext.getFunctionAddress("glEnableVertexAttribArrayARB")) != 0 &
			(glDisableVertexAttribArrayARB = GLContext.getFunctionAddress("glDisableVertexAttribArrayARB")) != 0 &
			(glBindAttribLocationARB = GLContext.getFunctionAddress("glBindAttribLocationARB")) != 0 &
			(glGetActiveAttribARB = GLContext.getFunctionAddress("glGetActiveAttribARB")) != 0 &
			(glGetAttribLocationARB = GLContext.getFunctionAddress("glGetAttribLocationARB")) != 0 &
			(glGetVertexAttribfvARB = GLContext.getFunctionAddress("glGetVertexAttribfvARB")) != 0 &
			(glGetVertexAttribdvARB = GLContext.getFunctionAddress("glGetVertexAttribdvARB")) != 0 &
			(glGetVertexAttribivARB = GLContext.getFunctionAddress("glGetVertexAttribivARB")) != 0 &
			(glGetVertexAttribPointervARB = GLContext.getFunctionAddress("glGetVertexAttribPointervARB")) != 0;
	}

	private boolean ARB_vertex_type_2_10_10_10_rev_initNativeFunctionAddresses() {
		return
			(glVertexP2ui = GLContext.getFunctionAddress("glVertexP2ui")) != 0 &
			(glVertexP3ui = GLContext.getFunctionAddress("glVertexP3ui")) != 0 &
			(glVertexP4ui = GLContext.getFunctionAddress("glVertexP4ui")) != 0 &
			(glVertexP2uiv = GLContext.getFunctionAddress("glVertexP2uiv")) != 0 &
			(glVertexP3uiv = GLContext.getFunctionAddress("glVertexP3uiv")) != 0 &
			(glVertexP4uiv = GLContext.getFunctionAddress("glVertexP4uiv")) != 0 &
			(glTexCoordP1ui = GLContext.getFunctionAddress("glTexCoordP1ui")) != 0 &
			(glTexCoordP2ui = GLContext.getFunctionAddress("glTexCoordP2ui")) != 0 &
			(glTexCoordP3ui = GLContext.getFunctionAddress("glTexCoordP3ui")) != 0 &
			(glTexCoordP4ui = GLContext.getFunctionAddress("glTexCoordP4ui")) != 0 &
			(glTexCoordP1uiv = GLContext.getFunctionAddress("glTexCoordP1uiv")) != 0 &
			(glTexCoordP2uiv = GLContext.getFunctionAddress("glTexCoordP2uiv")) != 0 &
			(glTexCoordP3uiv = GLContext.getFunctionAddress("glTexCoordP3uiv")) != 0 &
			(glTexCoordP4uiv = GLContext.getFunctionAddress("glTexCoordP4uiv")) != 0 &
			(glMultiTexCoordP1ui = GLContext.getFunctionAddress("glMultiTexCoordP1ui")) != 0 &
			(glMultiTexCoordP2ui = GLContext.getFunctionAddress("glMultiTexCoordP2ui")) != 0 &
			(glMultiTexCoordP3ui = GLContext.getFunctionAddress("glMultiTexCoordP3ui")) != 0 &
			(glMultiTexCoordP4ui = GLContext.getFunctionAddress("glMultiTexCoordP4ui")) != 0 &
			(glMultiTexCoordP1uiv = GLContext.getFunctionAddress("glMultiTexCoordP1uiv")) != 0 &
			(glMultiTexCoordP2uiv = GLContext.getFunctionAddress("glMultiTexCoordP2uiv")) != 0 &
			(glMultiTexCoordP3uiv = GLContext.getFunctionAddress("glMultiTexCoordP3uiv")) != 0 &
			(glMultiTexCoordP4uiv = GLContext.getFunctionAddress("glMultiTexCoordP4uiv")) != 0 &
			(glNormalP3ui = GLContext.getFunctionAddress("glNormalP3ui")) != 0 &
			(glNormalP3uiv = GLContext.getFunctionAddress("glNormalP3uiv")) != 0 &
			(glColorP3ui = GLContext.getFunctionAddress("glColorP3ui")) != 0 &
			(glColorP4ui = GLContext.getFunctionAddress("glColorP4ui")) != 0 &
			(glColorP3uiv = GLContext.getFunctionAddress("glColorP3uiv")) != 0 &
			(glColorP4uiv = GLContext.getFunctionAddress("glColorP4uiv")) != 0 &
			(glSecondaryColorP3ui = GLContext.getFunctionAddress("glSecondaryColorP3ui")) != 0 &
			(glSecondaryColorP3uiv = GLContext.getFunctionAddress("glSecondaryColorP3uiv")) != 0 &
			(glVertexAttribP1ui = GLContext.getFunctionAddress("glVertexAttribP1ui")) != 0 &
			(glVertexAttribP2ui = GLContext.getFunctionAddress("glVertexAttribP2ui")) != 0 &
			(glVertexAttribP3ui = GLContext.getFunctionAddress("glVertexAttribP3ui")) != 0 &
			(glVertexAttribP4ui = GLContext.getFunctionAddress("glVertexAttribP4ui")) != 0 &
			(glVertexAttribP1uiv = GLContext.getFunctionAddress("glVertexAttribP1uiv")) != 0 &
			(glVertexAttribP2uiv = GLContext.getFunctionAddress("glVertexAttribP2uiv")) != 0 &
			(glVertexAttribP3uiv = GLContext.getFunctionAddress("glVertexAttribP3uiv")) != 0 &
			(glVertexAttribP4uiv = GLContext.getFunctionAddress("glVertexAttribP4uiv")) != 0;
	}

	private boolean ARB_viewport_array_initNativeFunctionAddresses() {
		return
			(glViewportArrayv = GLContext.getFunctionAddress("glViewportArrayv")) != 0 &
			(glViewportIndexedf = GLContext.getFunctionAddress("glViewportIndexedf")) != 0 &
			(glViewportIndexedfv = GLContext.getFunctionAddress("glViewportIndexedfv")) != 0 &
			(glScissorArrayv = GLContext.getFunctionAddress("glScissorArrayv")) != 0 &
			(glScissorIndexed = GLContext.getFunctionAddress("glScissorIndexed")) != 0 &
			(glScissorIndexedv = GLContext.getFunctionAddress("glScissorIndexedv")) != 0 &
			(glDepthRangeArrayv = GLContext.getFunctionAddress("glDepthRangeArrayv")) != 0 &
			(glDepthRangeIndexed = GLContext.getFunctionAddress("glDepthRangeIndexed")) != 0 &
			(glGetFloati_v = GLContext.getFunctionAddress("glGetFloati_v")) != 0 &
			(glGetDoublei_v = GLContext.getFunctionAddress("glGetDoublei_v")) != 0 &
			(glGetIntegerIndexedvEXT = GLContext.getFunctionAddress("glGetIntegerIndexedvEXT")) != 0 &
			(glEnableIndexedEXT = GLContext.getFunctionAddress("glEnableIndexedEXT")) != 0 &
			(glDisableIndexedEXT = GLContext.getFunctionAddress("glDisableIndexedEXT")) != 0 &
			(glIsEnabledIndexedEXT = GLContext.getFunctionAddress("glIsEnabledIndexedEXT")) != 0;
	}

	private boolean ARB_window_pos_initNativeFunctionAddresses(boolean forwardCompatible) {
		return
			(forwardCompatible || (glWindowPos2fARB = GLContext.getFunctionAddress("glWindowPos2fARB")) != 0) &
			(forwardCompatible || (glWindowPos2dARB = GLContext.getFunctionAddress("glWindowPos2dARB")) != 0) &
			(forwardCompatible || (glWindowPos2iARB = GLContext.getFunctionAddress("glWindowPos2iARB")) != 0) &
			(forwardCompatible || (glWindowPos2sARB = GLContext.getFunctionAddress("glWindowPos2sARB")) != 0) &
			(forwardCompatible || (glWindowPos3fARB = GLContext.getFunctionAddress("glWindowPos3fARB")) != 0) &
			(forwardCompatible || (glWindowPos3dARB = GLContext.getFunctionAddress("glWindowPos3dARB")) != 0) &
			(forwardCompatible || (glWindowPos3iARB = GLContext.getFunctionAddress("glWindowPos3iARB")) != 0) &
			(forwardCompatible || (glWindowPos3sARB = GLContext.getFunctionAddress("glWindowPos3sARB")) != 0);
	}

	private boolean ATI_draw_buffers_initNativeFunctionAddresses() {
		return
			(glDrawBuffersATI = GLContext.getFunctionAddress("glDrawBuffersATI")) != 0;
	}

	private boolean ATI_element_array_initNativeFunctionAddresses() {
		return
			(glElementPointerATI = GLContext.getFunctionAddress("glElementPointerATI")) != 0 &
			(glDrawElementArrayATI = GLContext.getFunctionAddress("glDrawElementArrayATI")) != 0 &
			(glDrawRangeElementArrayATI = GLContext.getFunctionAddress("glDrawRangeElementArrayATI")) != 0;
	}

	private boolean ATI_envmap_bumpmap_initNativeFunctionAddresses() {
		return
			(glTexBumpParameterfvATI = GLContext.getFunctionAddress("glTexBumpParameterfvATI")) != 0 &
			(glTexBumpParameterivATI = GLContext.getFunctionAddress("glTexBumpParameterivATI")) != 0 &
			(glGetTexBumpParameterfvATI = GLContext.getFunctionAddress("glGetTexBumpParameterfvATI")) != 0 &
			(glGetTexBumpParameterivATI = GLContext.getFunctionAddress("glGetTexBumpParameterivATI")) != 0;
	}

	private boolean ATI_fragment_shader_initNativeFunctionAddresses() {
		return
			(glGenFragmentShadersATI = GLContext.getFunctionAddress("glGenFragmentShadersATI")) != 0 &
			(glBindFragmentShaderATI = GLContext.getFunctionAddress("glBindFragmentShaderATI")) != 0 &
			(glDeleteFragmentShaderATI = GLContext.getFunctionAddress("glDeleteFragmentShaderATI")) != 0 &
			(glBeginFragmentShaderATI = GLContext.getFunctionAddress("glBeginFragmentShaderATI")) != 0 &
			(glEndFragmentShaderATI = GLContext.getFunctionAddress("glEndFragmentShaderATI")) != 0 &
			(glPassTexCoordATI = GLContext.getFunctionAddress("glPassTexCoordATI")) != 0 &
			(glSampleMapATI = GLContext.getFunctionAddress("glSampleMapATI")) != 0 &
			(glColorFragmentOp1ATI = GLContext.getFunctionAddress("glColorFragmentOp1ATI")) != 0 &
			(glColorFragmentOp2ATI = GLContext.getFunctionAddress("glColorFragmentOp2ATI")) != 0 &
			(glColorFragmentOp3ATI = GLContext.getFunctionAddress("glColorFragmentOp3ATI")) != 0 &
			(glAlphaFragmentOp1ATI = GLContext.getFunctionAddress("glAlphaFragmentOp1ATI")) != 0 &
			(glAlphaFragmentOp2ATI = GLContext.getFunctionAddress("glAlphaFragmentOp2ATI")) != 0 &
			(glAlphaFragmentOp3ATI = GLContext.getFunctionAddress("glAlphaFragmentOp3ATI")) != 0 &
			(glSetFragmentShaderConstantATI = GLContext.getFunctionAddress("glSetFragmentShaderConstantATI")) != 0;
	}

	private boolean ATI_map_object_buffer_initNativeFunctionAddresses() {
		return
			(glMapObjectBufferATI = GLContext.getFunctionAddress("glMapObjectBufferATI")) != 0 &
			(glUnmapObjectBufferATI = GLContext.getFunctionAddress("glUnmapObjectBufferATI")) != 0;
	}

	private boolean ATI_pn_triangles_initNativeFunctionAddresses() {
		return
			(glPNTrianglesfATI = GLContext.getFunctionAddress("glPNTrianglesfATI")) != 0 &
			(glPNTrianglesiATI = GLContext.getFunctionAddress("glPNTrianglesiATI")) != 0;
	}

	private boolean ATI_separate_stencil_initNativeFunctionAddresses() {
		return
			(glStencilOpSeparateATI = GLContext.getFunctionAddress("glStencilOpSeparateATI")) != 0 &
			(glStencilFuncSeparateATI = GLContext.getFunctionAddress("glStencilFuncSeparateATI")) != 0;
	}

	private boolean ATI_vertex_array_object_initNativeFunctionAddresses() {
		return
			(glNewObjectBufferATI = GLContext.getFunctionAddress("glNewObjectBufferATI")) != 0 &
			(glIsObjectBufferATI = GLContext.getFunctionAddress("glIsObjectBufferATI")) != 0 &
			(glUpdateObjectBufferATI = GLContext.getFunctionAddress("glUpdateObjectBufferATI")) != 0 &
			(glGetObjectBufferfvATI = GLContext.getFunctionAddress("glGetObjectBufferfvATI")) != 0 &
			(glGetObjectBufferivATI = GLContext.getFunctionAddress("glGetObjectBufferivATI")) != 0 &
			(glFreeObjectBufferATI = GLContext.getFunctionAddress("glFreeObjectBufferATI")) != 0 &
			(glArrayObjectATI = GLContext.getFunctionAddress("glArrayObjectATI")) != 0 &
			(glGetArrayObjectfvATI = GLContext.getFunctionAddress("glGetArrayObjectfvATI")) != 0 &
			(glGetArrayObjectivATI = GLContext.getFunctionAddress("glGetArrayObjectivATI")) != 0 &
			(glVariantArrayObjectATI = GLContext.getFunctionAddress("glVariantArrayObjectATI")) != 0 &
			(glGetVariantArrayObjectfvATI = GLContext.getFunctionAddress("glGetVariantArrayObjectfvATI")) != 0 &
			(glGetVariantArrayObjectivATI = GLContext.getFunctionAddress("glGetVariantArrayObjectivATI")) != 0;
	}

	private boolean ATI_vertex_attrib_array_object_initNativeFunctionAddresses() {
		return
			(glVertexAttribArrayObjectATI = GLContext.getFunctionAddress("glVertexAttribArrayObjectATI")) != 0 &
			(glGetVertexAttribArrayObjectfvATI = GLContext.getFunctionAddress("glGetVertexAttribArrayObjectfvATI")) != 0 &
			(glGetVertexAttribArrayObjectivATI = GLContext.getFunctionAddress("glGetVertexAttribArrayObjectivATI")) != 0;
	}

	private boolean ATI_vertex_streams_initNativeFunctionAddresses() {
		return
			(glVertexStream2fATI = GLContext.getFunctionAddress("glVertexStream2fATI")) != 0 &
			(glVertexStream2dATI = GLContext.getFunctionAddress("glVertexStream2dATI")) != 0 &
			(glVertexStream2iATI = GLContext.getFunctionAddress("glVertexStream2iATI")) != 0 &
			(glVertexStream2sATI = GLContext.getFunctionAddress("glVertexStream2sATI")) != 0 &
			(glVertexStream3fATI = GLContext.getFunctionAddress("glVertexStream3fATI")) != 0 &
			(glVertexStream3dATI = GLContext.getFunctionAddress("glVertexStream3dATI")) != 0 &
			(glVertexStream3iATI = GLContext.getFunctionAddress("glVertexStream3iATI")) != 0 &
			(glVertexStream3sATI = GLContext.getFunctionAddress("glVertexStream3sATI")) != 0 &
			(glVertexStream4fATI = GLContext.getFunctionAddress("glVertexStream4fATI")) != 0 &
			(glVertexStream4dATI = GLContext.getFunctionAddress("glVertexStream4dATI")) != 0 &
			(glVertexStream4iATI = GLContext.getFunctionAddress("glVertexStream4iATI")) != 0 &
			(glVertexStream4sATI = GLContext.getFunctionAddress("glVertexStream4sATI")) != 0 &
			(glNormalStream3bATI = GLContext.getFunctionAddress("glNormalStream3bATI")) != 0 &
			(glNormalStream3fATI = GLContext.getFunctionAddress("glNormalStream3fATI")) != 0 &
			(glNormalStream3dATI = GLContext.getFunctionAddress("glNormalStream3dATI")) != 0 &
			(glNormalStream3iATI = GLContext.getFunctionAddress("glNormalStream3iATI")) != 0 &
			(glNormalStream3sATI = GLContext.getFunctionAddress("glNormalStream3sATI")) != 0 &
			(glClientActiveVertexStreamATI = GLContext.getFunctionAddress("glClientActiveVertexStreamATI")) != 0 &
			(glVertexBlendEnvfATI = GLContext.getFunctionAddress("glVertexBlendEnvfATI")) != 0 &
			(glVertexBlendEnviATI = GLContext.getFunctionAddress("glVertexBlendEnviATI")) != 0;
	}

	private boolean EXT_bindable_uniform_initNativeFunctionAddresses() {
		return
			(glUniformBufferEXT = GLContext.getFunctionAddress("glUniformBufferEXT")) != 0 &
			(glGetUniformBufferSizeEXT = GLContext.getFunctionAddress("glGetUniformBufferSizeEXT")) != 0 &
			(glGetUniformOffsetEXT = GLContext.getFunctionAddress("glGetUniformOffsetEXT")) != 0;
	}

	private boolean EXT_blend_color_initNativeFunctionAddresses() {
		return
			(glBlendColorEXT = GLContext.getFunctionAddress("glBlendColorEXT")) != 0;
	}

	private boolean EXT_blend_equation_separate_initNativeFunctionAddresses() {
		return
			(glBlendEquationSeparateEXT = GLContext.getFunctionAddress("glBlendEquationSeparateEXT")) != 0;
	}

	private boolean EXT_blend_func_separate_initNativeFunctionAddresses() {
		return
			(glBlendFuncSeparateEXT = GLContext.getFunctionAddress("glBlendFuncSeparateEXT")) != 0;
	}

	private boolean EXT_blend_minmax_initNativeFunctionAddresses() {
		return
			(glBlendEquationEXT = GLContext.getFunctionAddress("glBlendEquationEXT")) != 0;
	}

	private boolean EXT_compiled_vertex_array_initNativeFunctionAddresses() {
		return
			(glLockArraysEXT = GLContext.getFunctionAddress("glLockArraysEXT")) != 0 &
			(glUnlockArraysEXT = GLContext.getFunctionAddress("glUnlockArraysEXT")) != 0;
	}

	private boolean EXT_depth_bounds_test_initNativeFunctionAddresses() {
		return
			(glDepthBoundsEXT = GLContext.getFunctionAddress("glDepthBoundsEXT")) != 0;
	}

	private boolean EXT_direct_state_access_initNativeFunctionAddresses(boolean forwardCompatible,Set<String> supported_extensions) {
		return
			(forwardCompatible || (glClientAttribDefaultEXT = GLContext.getFunctionAddress("glClientAttribDefaultEXT")) != 0) &
			(forwardCompatible || (glPushClientAttribDefaultEXT = GLContext.getFunctionAddress("glPushClientAttribDefaultEXT")) != 0) &
			(forwardCompatible || (glMatrixLoadfEXT = GLContext.getFunctionAddress("glMatrixLoadfEXT")) != 0) &
			(forwardCompatible || (glMatrixLoaddEXT = GLContext.getFunctionAddress("glMatrixLoaddEXT")) != 0) &
			(forwardCompatible || (glMatrixMultfEXT = GLContext.getFunctionAddress("glMatrixMultfEXT")) != 0) &
			(forwardCompatible || (glMatrixMultdEXT = GLContext.getFunctionAddress("glMatrixMultdEXT")) != 0) &
			(forwardCompatible || (glMatrixLoadIdentityEXT = GLContext.getFunctionAddress("glMatrixLoadIdentityEXT")) != 0) &
			(forwardCompatible || (glMatrixRotatefEXT = GLContext.getFunctionAddress("glMatrixRotatefEXT")) != 0) &
			(forwardCompatible || (glMatrixRotatedEXT = GLContext.getFunctionAddress("glMatrixRotatedEXT")) != 0) &
			(forwardCompatible || (glMatrixScalefEXT = GLContext.getFunctionAddress("glMatrixScalefEXT")) != 0) &
			(forwardCompatible || (glMatrixScaledEXT = GLContext.getFunctionAddress("glMatrixScaledEXT")) != 0) &
			(forwardCompatible || (glMatrixTranslatefEXT = GLContext.getFunctionAddress("glMatrixTranslatefEXT")) != 0) &
			(forwardCompatible || (glMatrixTranslatedEXT = GLContext.getFunctionAddress("glMatrixTranslatedEXT")) != 0) &
			(forwardCompatible || (glMatrixOrthoEXT = GLContext.getFunctionAddress("glMatrixOrthoEXT")) != 0) &
			(forwardCompatible || (glMatrixFrustumEXT = GLContext.getFunctionAddress("glMatrixFrustumEXT")) != 0) &
			(forwardCompatible || (glMatrixPushEXT = GLContext.getFunctionAddress("glMatrixPushEXT")) != 0) &
			(forwardCompatible || (glMatrixPopEXT = GLContext.getFunctionAddress("glMatrixPopEXT")) != 0) &
			(glTextureParameteriEXT = GLContext.getFunctionAddress("glTextureParameteriEXT")) != 0 &
			(glTextureParameterivEXT = GLContext.getFunctionAddress("glTextureParameterivEXT")) != 0 &
			(glTextureParameterfEXT = GLContext.getFunctionAddress("glTextureParameterfEXT")) != 0 &
			(glTextureParameterfvEXT = GLContext.getFunctionAddress("glTextureParameterfvEXT")) != 0 &
			(glTextureImage1DEXT = GLContext.getFunctionAddress("glTextureImage1DEXT")) != 0 &
			(glTextureImage2DEXT = GLContext.getFunctionAddress("glTextureImage2DEXT")) != 0 &
			(glTextureSubImage1DEXT = GLContext.getFunctionAddress("glTextureSubImage1DEXT")) != 0 &
			(glTextureSubImage2DEXT = GLContext.getFunctionAddress("glTextureSubImage2DEXT")) != 0 &
			(glCopyTextureImage1DEXT = GLContext.getFunctionAddress("glCopyTextureImage1DEXT")) != 0 &
			(glCopyTextureImage2DEXT = GLContext.getFunctionAddress("glCopyTextureImage2DEXT")) != 0 &
			(glCopyTextureSubImage1DEXT = GLContext.getFunctionAddress("glCopyTextureSubImage1DEXT")) != 0 &
			(glCopyTextureSubImage2DEXT = GLContext.getFunctionAddress("glCopyTextureSubImage2DEXT")) != 0 &
			(glGetTextureImageEXT = GLContext.getFunctionAddress("glGetTextureImageEXT")) != 0 &
			(glGetTextureParameterfvEXT = GLContext.getFunctionAddress("glGetTextureParameterfvEXT")) != 0 &
			(glGetTextureParameterivEXT = GLContext.getFunctionAddress("glGetTextureParameterivEXT")) != 0 &
			(glGetTextureLevelParameterfvEXT = GLContext.getFunctionAddress("glGetTextureLevelParameterfvEXT")) != 0 &
			(glGetTextureLevelParameterivEXT = GLContext.getFunctionAddress("glGetTextureLevelParameterivEXT")) != 0 &
			(!supported_extensions.contains("OpenGL12") || (glTextureImage3DEXT = GLContext.getFunctionAddress("glTextureImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL12") || (glTextureSubImage3DEXT = GLContext.getFunctionAddress("glTextureSubImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL12") || (glCopyTextureSubImage3DEXT = GLContext.getFunctionAddress("glCopyTextureSubImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glBindMultiTextureEXT = GLContext.getFunctionAddress("glBindMultiTextureEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexCoordPointerEXT = GLContext.getFunctionAddress("glMultiTexCoordPointerEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexEnvfEXT = GLContext.getFunctionAddress("glMultiTexEnvfEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexEnvfvEXT = GLContext.getFunctionAddress("glMultiTexEnvfvEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexEnviEXT = GLContext.getFunctionAddress("glMultiTexEnviEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexEnvivEXT = GLContext.getFunctionAddress("glMultiTexEnvivEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexGendEXT = GLContext.getFunctionAddress("glMultiTexGendEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexGendvEXT = GLContext.getFunctionAddress("glMultiTexGendvEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexGenfEXT = GLContext.getFunctionAddress("glMultiTexGenfEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexGenfvEXT = GLContext.getFunctionAddress("glMultiTexGenfvEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexGeniEXT = GLContext.getFunctionAddress("glMultiTexGeniEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMultiTexGenivEXT = GLContext.getFunctionAddress("glMultiTexGenivEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glGetMultiTexEnvfvEXT = GLContext.getFunctionAddress("glGetMultiTexEnvfvEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glGetMultiTexEnvivEXT = GLContext.getFunctionAddress("glGetMultiTexEnvivEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glGetMultiTexGendvEXT = GLContext.getFunctionAddress("glGetMultiTexGendvEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glGetMultiTexGenfvEXT = GLContext.getFunctionAddress("glGetMultiTexGenfvEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glGetMultiTexGenivEXT = GLContext.getFunctionAddress("glGetMultiTexGenivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexParameteriEXT = GLContext.getFunctionAddress("glMultiTexParameteriEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexParameterivEXT = GLContext.getFunctionAddress("glMultiTexParameterivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexParameterfEXT = GLContext.getFunctionAddress("glMultiTexParameterfEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexParameterfvEXT = GLContext.getFunctionAddress("glMultiTexParameterfvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexImage1DEXT = GLContext.getFunctionAddress("glMultiTexImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexImage2DEXT = GLContext.getFunctionAddress("glMultiTexImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexSubImage1DEXT = GLContext.getFunctionAddress("glMultiTexSubImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexSubImage2DEXT = GLContext.getFunctionAddress("glMultiTexSubImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCopyMultiTexImage1DEXT = GLContext.getFunctionAddress("glCopyMultiTexImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCopyMultiTexImage2DEXT = GLContext.getFunctionAddress("glCopyMultiTexImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCopyMultiTexSubImage1DEXT = GLContext.getFunctionAddress("glCopyMultiTexSubImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCopyMultiTexSubImage2DEXT = GLContext.getFunctionAddress("glCopyMultiTexSubImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetMultiTexImageEXT = GLContext.getFunctionAddress("glGetMultiTexImageEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetMultiTexParameterfvEXT = GLContext.getFunctionAddress("glGetMultiTexParameterfvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetMultiTexParameterivEXT = GLContext.getFunctionAddress("glGetMultiTexParameterivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetMultiTexLevelParameterfvEXT = GLContext.getFunctionAddress("glGetMultiTexLevelParameterfvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetMultiTexLevelParameterivEXT = GLContext.getFunctionAddress("glGetMultiTexLevelParameterivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexImage3DEXT = GLContext.getFunctionAddress("glMultiTexImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glMultiTexSubImage3DEXT = GLContext.getFunctionAddress("glMultiTexSubImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCopyMultiTexSubImage3DEXT = GLContext.getFunctionAddress("glCopyMultiTexSubImage3DEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glEnableClientStateIndexedEXT = GLContext.getFunctionAddress("glEnableClientStateIndexedEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glDisableClientStateIndexedEXT = GLContext.getFunctionAddress("glDisableClientStateIndexedEXT")) != 0) &
			((!supported_extensions.contains("OpenGL30") || (glEnableClientStateiEXT = GLContext.getFunctionAddress("glEnableClientStateiEXT")) != 0) || true) &
			((!supported_extensions.contains("OpenGL30") || (glDisableClientStateiEXT = GLContext.getFunctionAddress("glDisableClientStateiEXT")) != 0) || true) &
			(!supported_extensions.contains("OpenGL13") || (glGetFloatIndexedvEXT = GLContext.getFunctionAddress("glGetFloatIndexedvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetDoubleIndexedvEXT = GLContext.getFunctionAddress("glGetDoubleIndexedvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetPointerIndexedvEXT = GLContext.getFunctionAddress("glGetPointerIndexedvEXT")) != 0) &
			((!supported_extensions.contains("OpenGL30") || (glGetFloati_vEXT = GLContext.getFunctionAddress("glGetFloati_vEXT")) != 0) || true) &
			((!supported_extensions.contains("OpenGL30") || (glGetDoublei_vEXT = GLContext.getFunctionAddress("glGetDoublei_vEXT")) != 0) || true) &
			((!supported_extensions.contains("OpenGL30") || (glGetPointeri_vEXT = GLContext.getFunctionAddress("glGetPointeri_vEXT")) != 0) || true) &
			(!supported_extensions.contains("OpenGL13") || (glEnableIndexedEXT = GLContext.getFunctionAddress("glEnableIndexedEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glDisableIndexedEXT = GLContext.getFunctionAddress("glDisableIndexedEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glIsEnabledIndexedEXT = GLContext.getFunctionAddress("glIsEnabledIndexedEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetIntegerIndexedvEXT = GLContext.getFunctionAddress("glGetIntegerIndexedvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetBooleanIndexedvEXT = GLContext.getFunctionAddress("glGetBooleanIndexedvEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glNamedProgramStringEXT = GLContext.getFunctionAddress("glNamedProgramStringEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glNamedProgramLocalParameter4dEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameter4dEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glNamedProgramLocalParameter4dvEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameter4dvEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glNamedProgramLocalParameter4fEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameter4fEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glNamedProgramLocalParameter4fvEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameter4fvEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glGetNamedProgramLocalParameterdvEXT = GLContext.getFunctionAddress("glGetNamedProgramLocalParameterdvEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glGetNamedProgramLocalParameterfvEXT = GLContext.getFunctionAddress("glGetNamedProgramLocalParameterfvEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glGetNamedProgramivEXT = GLContext.getFunctionAddress("glGetNamedProgramivEXT")) != 0) &
			(!supported_extensions.contains("GL_ARB_vertex_program") || (glGetNamedProgramStringEXT = GLContext.getFunctionAddress("glGetNamedProgramStringEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedTextureImage3DEXT = GLContext.getFunctionAddress("glCompressedTextureImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedTextureImage2DEXT = GLContext.getFunctionAddress("glCompressedTextureImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedTextureImage1DEXT = GLContext.getFunctionAddress("glCompressedTextureImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedTextureSubImage3DEXT = GLContext.getFunctionAddress("glCompressedTextureSubImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedTextureSubImage2DEXT = GLContext.getFunctionAddress("glCompressedTextureSubImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedTextureSubImage1DEXT = GLContext.getFunctionAddress("glCompressedTextureSubImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetCompressedTextureImageEXT = GLContext.getFunctionAddress("glGetCompressedTextureImageEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedMultiTexImage3DEXT = GLContext.getFunctionAddress("glCompressedMultiTexImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedMultiTexImage2DEXT = GLContext.getFunctionAddress("glCompressedMultiTexImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedMultiTexImage1DEXT = GLContext.getFunctionAddress("glCompressedMultiTexImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedMultiTexSubImage3DEXT = GLContext.getFunctionAddress("glCompressedMultiTexSubImage3DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedMultiTexSubImage2DEXT = GLContext.getFunctionAddress("glCompressedMultiTexSubImage2DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glCompressedMultiTexSubImage1DEXT = GLContext.getFunctionAddress("glCompressedMultiTexSubImage1DEXT")) != 0) &
			(!supported_extensions.contains("OpenGL13") || (glGetCompressedMultiTexImageEXT = GLContext.getFunctionAddress("glGetCompressedMultiTexImageEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMatrixLoadTransposefEXT = GLContext.getFunctionAddress("glMatrixLoadTransposefEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMatrixLoadTransposedEXT = GLContext.getFunctionAddress("glMatrixLoadTransposedEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMatrixMultTransposefEXT = GLContext.getFunctionAddress("glMatrixMultTransposefEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL13") || (glMatrixMultTransposedEXT = GLContext.getFunctionAddress("glMatrixMultTransposedEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glNamedBufferDataEXT = GLContext.getFunctionAddress("glNamedBufferDataEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glNamedBufferSubDataEXT = GLContext.getFunctionAddress("glNamedBufferSubDataEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glMapNamedBufferEXT = GLContext.getFunctionAddress("glMapNamedBufferEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glUnmapNamedBufferEXT = GLContext.getFunctionAddress("glUnmapNamedBufferEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glGetNamedBufferParameterivEXT = GLContext.getFunctionAddress("glGetNamedBufferParameterivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glGetNamedBufferPointervEXT = GLContext.getFunctionAddress("glGetNamedBufferPointervEXT")) != 0) &
			(!supported_extensions.contains("OpenGL15") || (glGetNamedBufferSubDataEXT = GLContext.getFunctionAddress("glGetNamedBufferSubDataEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform1fEXT = GLContext.getFunctionAddress("glProgramUniform1fEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform2fEXT = GLContext.getFunctionAddress("glProgramUniform2fEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform3fEXT = GLContext.getFunctionAddress("glProgramUniform3fEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform4fEXT = GLContext.getFunctionAddress("glProgramUniform4fEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform1iEXT = GLContext.getFunctionAddress("glProgramUniform1iEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform2iEXT = GLContext.getFunctionAddress("glProgramUniform2iEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform3iEXT = GLContext.getFunctionAddress("glProgramUniform3iEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform4iEXT = GLContext.getFunctionAddress("glProgramUniform4iEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform1fvEXT = GLContext.getFunctionAddress("glProgramUniform1fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform2fvEXT = GLContext.getFunctionAddress("glProgramUniform2fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform3fvEXT = GLContext.getFunctionAddress("glProgramUniform3fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform4fvEXT = GLContext.getFunctionAddress("glProgramUniform4fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform1ivEXT = GLContext.getFunctionAddress("glProgramUniform1ivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform2ivEXT = GLContext.getFunctionAddress("glProgramUniform2ivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform3ivEXT = GLContext.getFunctionAddress("glProgramUniform3ivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniform4ivEXT = GLContext.getFunctionAddress("glProgramUniform4ivEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniformMatrix2fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix2fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniformMatrix3fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix3fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL20") || (glProgramUniformMatrix4fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix4fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL21") || (glProgramUniformMatrix2x3fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix2x3fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL21") || (glProgramUniformMatrix3x2fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix3x2fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL21") || (glProgramUniformMatrix2x4fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix2x4fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL21") || (glProgramUniformMatrix4x2fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix4x2fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL21") || (glProgramUniformMatrix3x4fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix3x4fvEXT")) != 0) &
			(!supported_extensions.contains("OpenGL21") || (glProgramUniformMatrix4x3fvEXT = GLContext.getFunctionAddress("glProgramUniformMatrix4x3fvEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_buffer_object") || (glTextureBufferEXT = GLContext.getFunctionAddress("glTextureBufferEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_buffer_object") || (glMultiTexBufferEXT = GLContext.getFunctionAddress("glMultiTexBufferEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glTextureParameterIivEXT = GLContext.getFunctionAddress("glTextureParameterIivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glTextureParameterIuivEXT = GLContext.getFunctionAddress("glTextureParameterIuivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glGetTextureParameterIivEXT = GLContext.getFunctionAddress("glGetTextureParameterIivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glGetTextureParameterIuivEXT = GLContext.getFunctionAddress("glGetTextureParameterIuivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glMultiTexParameterIivEXT = GLContext.getFunctionAddress("glMultiTexParameterIivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glMultiTexParameterIuivEXT = GLContext.getFunctionAddress("glMultiTexParameterIuivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glGetMultiTexParameterIivEXT = GLContext.getFunctionAddress("glGetMultiTexParameterIivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_texture_integer") || (glGetMultiTexParameterIuivEXT = GLContext.getFunctionAddress("glGetMultiTexParameterIuivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform1uiEXT = GLContext.getFunctionAddress("glProgramUniform1uiEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform2uiEXT = GLContext.getFunctionAddress("glProgramUniform2uiEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform3uiEXT = GLContext.getFunctionAddress("glProgramUniform3uiEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform4uiEXT = GLContext.getFunctionAddress("glProgramUniform4uiEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform1uivEXT = GLContext.getFunctionAddress("glProgramUniform1uivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform2uivEXT = GLContext.getFunctionAddress("glProgramUniform2uivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform3uivEXT = GLContext.getFunctionAddress("glProgramUniform3uivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_shader4") || (glProgramUniform4uivEXT = GLContext.getFunctionAddress("glProgramUniform4uivEXT")) != 0) &
			(!supported_extensions.contains("GL_EXT_gpu_program_parameters") || (glNamedProgramLocalParameters4fvEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameters4fvEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glNamedProgramLocalParameterI4iEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameterI4iEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glNamedProgramLocalParameterI4ivEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameterI4ivEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glNamedProgramLocalParametersI4ivEXT = GLContext.getFunctionAddress("glNamedProgramLocalParametersI4ivEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glNamedProgramLocalParameterI4uiEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameterI4uiEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glNamedProgramLocalParameterI4uivEXT = GLContext.getFunctionAddress("glNamedProgramLocalParameterI4uivEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glNamedProgramLocalParametersI4uivEXT = GLContext.getFunctionAddress("glNamedProgramLocalParametersI4uivEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glGetNamedProgramLocalParameterIivEXT = GLContext.getFunctionAddress("glGetNamedProgramLocalParameterIivEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_gpu_program4") || (glGetNamedProgramLocalParameterIuivEXT = GLContext.getFunctionAddress("glGetNamedProgramLocalParameterIuivEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glNamedRenderbufferStorageEXT = GLContext.getFunctionAddress("glNamedRenderbufferStorageEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glGetNamedRenderbufferParameterivEXT = GLContext.getFunctionAddress("glGetNamedRenderbufferParameterivEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_multisample")) || (glNamedRenderbufferStorageMultisampleEXT = GLContext.getFunctionAddress("glNamedRenderbufferStorageMultisampleEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_framebuffer_multisample_coverage") || (glNamedRenderbufferStorageMultisampleCoverageEXT = GLContext.getFunctionAddress("glNamedRenderbufferStorageMultisampleCoverageEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glCheckNamedFramebufferStatusEXT = GLContext.getFunctionAddress("glCheckNamedFramebufferStatusEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glNamedFramebufferTexture1DEXT = GLContext.getFunctionAddress("glNamedFramebufferTexture1DEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glNamedFramebufferTexture2DEXT = GLContext.getFunctionAddress("glNamedFramebufferTexture2DEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glNamedFramebufferTexture3DEXT = GLContext.getFunctionAddress("glNamedFramebufferTexture3DEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glNamedFramebufferRenderbufferEXT = GLContext.getFunctionAddress("glNamedFramebufferRenderbufferEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glGetNamedFramebufferAttachmentParameterivEXT = GLContext.getFunctionAddress("glGetNamedFramebufferAttachmentParameterivEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glGenerateTextureMipmapEXT = GLContext.getFunctionAddress("glGenerateTextureMipmapEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glGenerateMultiTexMipmapEXT = GLContext.getFunctionAddress("glGenerateMultiTexMipmapEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glFramebufferDrawBufferEXT = GLContext.getFunctionAddress("glFramebufferDrawBufferEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glFramebufferDrawBuffersEXT = GLContext.getFunctionAddress("glFramebufferDrawBuffersEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glFramebufferReadBufferEXT = GLContext.getFunctionAddress("glFramebufferReadBufferEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL30") || supported_extensions.contains("GL_EXT_framebuffer_object")) || (glGetFramebufferParameterivEXT = GLContext.getFunctionAddress("glGetFramebufferParameterivEXT")) != 0) &
			(!(false || supported_extensions.contains("OpenGL31") || supported_extensions.contains("GL_ARB_copy_buffer")) || (glNamedCopyBufferSubDataEXT = GLContext.getFunctionAddress("glNamedCopyBufferSubDataEXT")) != 0) &
			(!(false || supported_extensions.contains("GL_EXT_geometry_shader4") || supported_extensions.contains("GL_NV_geometry_program4")) || (glNamedFramebufferTextureEXT = GLContext.getFunctionAddress("glNamedFramebufferTextureEXT")) != 0) &
			(!(false || supported_extensions.contains("GL_EXT_geometry_shader4") || supported_extensions.contains("GL_NV_geometry_program4")) || (glNamedFramebufferTextureLayerEXT = GLContext.getFunctionAddress("glNamedFramebufferTextureLayerEXT")) != 0) &
			(!(false || supported_extensions.contains("GL_EXT_geometry_shader4") || supported_extensions.contains("GL_NV_geometry_program4")) || (glNamedFramebufferTextureFaceEXT = GLContext.getFunctionAddress("glNamedFramebufferTextureFaceEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_explicit_multisample") || (glTextureRenderbufferEXT = GLContext.getFunctionAddress("glTextureRenderbufferEXT")) != 0) &
			(!supported_extensions.contains("GL_NV_explicit_multisample") || (glMultiTexRenderbufferEXT = GLContext.getFunctionAddress("glMultiTexRenderbufferEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayVertexOffsetEXT = GLContext.getFunctionAddress("glVertexArrayVertexOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayColorOffsetEXT = GLContext.getFunctionAddress("glVertexArrayColorOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayEdgeFlagOffsetEXT = GLContext.getFunctionAddress("glVertexArrayEdgeFlagOffsetEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glVertexArrayIndexOffsetEXT = GLContext.getFunctionAddress("glVertexArrayIndexOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayNormalOffsetEXT = GLContext.getFunctionAddress("glVertexArrayNormalOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayTexCoordOffsetEXT = GLContext.getFunctionAddress("glVertexArrayTexCoordOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayMultiTexCoordOffsetEXT = GLContext.getFunctionAddress("glVertexArrayMultiTexCoordOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArrayFogCoordOffsetEXT = GLContext.getFunctionAddress("glVertexArrayFogCoordOffsetEXT")) != 0) &
			(forwardCompatible || !supported_extensions.contains("OpenGL30") || (glVertexArraySecondaryColorOffsetEXT = GLContext.getFunctionAddress("glVertexArraySecondaryColorOffsetEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glVertexArrayVertexAttribOffsetEXT = GLContext.getFunctionAddress("glVertexArrayVertexAttribOffsetEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glVertexArrayVertexAttribIOffsetEXT = GLContext.getFunctionAddress("glVertexArrayVertexAttribIOffsetEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glEnableVertexArrayEXT = GLContext.getFunctionAddress("glEnableVertexArrayEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glDisableVertexArrayEXT = GLContext.getFunctionAddress("glDisableVertexArrayEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glEnableVertexArrayAttribEXT = GLContext.getFunctionAddress("glEnableVertexArrayAttribEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glDisableVertexArrayAttribEXT = GLContext.getFunctionAddress("glDisableVertexArrayAttribEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glGetVertexArrayIntegervEXT = GLContext.getFunctionAddress("glGetVertexArrayIntegervEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glGetVertexArrayPointervEXT = GLContext.getFunctionAddress("glGetVertexArrayPointervEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glGetVertexArrayIntegeri_vEXT = GLContext.getFunctionAddress("glGetVertexArrayIntegeri_vEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glGetVertexArrayPointeri_vEXT = GLContext.getFunctionAddress("glGetVertexArrayPointeri_vEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glMapNamedBufferRangeEXT = GLContext.getFunctionAddress("glMapNamedBufferRangeEXT")) != 0) &
			(!supported_extensions.contains("OpenGL30") || (glFlushMappedNamedBufferRangeEXT = GLContext.getFunctionAddress("glFlushMappedNamedBufferRangeEXT")) != 0);
	}

	private boolean EXT_draw_buffers2_initNativeFunctionAddresses() {
		return
			(glColorMaskIndexedEXT = GLContext.getFunctionAddress("glColorMaskIndexedEXT")) != 0 &
			(glGetBooleanIndexedvEXT = GLContext.getFunctionAddress("glGetBooleanIndexedvEXT")) != 0 &
			(glGetIntegerIndexedvEXT = GLContext.getFunctionAddress("glGetIntegerIndexedvEXT")) != 0 &
			(glEnableIndexedEXT = GLContext.getFunctionAddress("glEnableIndexedEXT")) != 0 &
			(glDisableIndexedEXT = GLContext.getFunctionAddress("glDisableIndexedEXT")) != 0 &
			(glIsEnabledIndexedEXT = GLContext.getFunctionAddress("glIsEnabledIndexedEXT")) != 0;
	}

	private boolean EXT_draw_instanced_initNativeFunctionAddresses() {
		return
			(glDrawArraysInstancedEXT = GLContext.getFunctionAddress("glDrawArraysInstancedEXT")) != 0 &
			(glDrawElementsInstancedEXT = GLContext.getFunctionAddress("glDrawElementsInstancedEXT")) != 0;
	}

	private boolean EXT_draw_range_elements_initNativeFunctionAddresses() {
		return
			(glDrawRangeElementsEXT = GLContext.getFunctionAddress("glDrawRangeElementsEXT")) != 0;
	}

	private boolean EXT_fog_coord_initNativeFunctionAddresses() {
		return
			(glFogCoordfEXT = GLContext.getFunctionAddress("glFogCoordfEXT")) != 0 &
			(glFogCoorddEXT = GLContext.getFunctionAddress("glFogCoorddEXT")) != 0 &
			(glFogCoordPointerEXT = GLContext.getFunctionAddress("glFogCoordPointerEXT")) != 0;
	}

	private boolean EXT_framebuffer_blit_initNativeFunctionAddresses() {
		return
			(glBlitFramebufferEXT = GLContext.getFunctionAddress("glBlitFramebufferEXT")) != 0;
	}

	private boolean EXT_framebuffer_multisample_initNativeFunctionAddresses() {
		return
			(glRenderbufferStorageMultisampleEXT = GLContext.getFunctionAddress("glRenderbufferStorageMultisampleEXT")) != 0;
	}

	private boolean EXT_framebuffer_object_initNativeFunctionAddresses() {
		return
			(glIsRenderbufferEXT = GLContext.getFunctionAddress("glIsRenderbufferEXT")) != 0 &
			(glBindRenderbufferEXT = GLContext.getFunctionAddress("glBindRenderbufferEXT")) != 0 &
			(glDeleteRenderbuffersEXT = GLContext.getFunctionAddress("glDeleteRenderbuffersEXT")) != 0 &
			(glGenRenderbuffersEXT = GLContext.getFunctionAddress("glGenRenderbuffersEXT")) != 0 &
			(glRenderbufferStorageEXT = GLContext.getFunctionAddress("glRenderbufferStorageEXT")) != 0 &
			(glGetRenderbufferParameterivEXT = GLContext.getFunctionAddress("glGetRenderbufferParameterivEXT")) != 0 &
			(glIsFramebufferEXT = GLContext.getFunctionAddress("glIsFramebufferEXT")) != 0 &
			(glBindFramebufferEXT = GLContext.getFunctionAddress("glBindFramebufferEXT")) != 0 &
			(glDeleteFramebuffersEXT = GLContext.getFunctionAddress("glDeleteFramebuffersEXT")) != 0 &
			(glGenFramebuffersEXT = GLContext.getFunctionAddress("glGenFramebuffersEXT")) != 0 &
			(glCheckFramebufferStatusEXT = GLContext.getFunctionAddress("glCheckFramebufferStatusEXT")) != 0 &
			(glFramebufferTexture1DEXT = GLContext.getFunctionAddress("glFramebufferTexture1DEXT")) != 0 &
			(glFramebufferTexture2DEXT = GLContext.getFunctionAddress("glFramebufferTexture2DEXT")) != 0 &
			(glFramebufferTexture3DEXT = GLContext.getFunctionAddress("glFramebufferTexture3DEXT")) != 0 &
			(glFramebufferRenderbufferEXT = GLContext.getFunctionAddress("glFramebufferRenderbufferEXT")) != 0 &
			(glGetFramebufferAttachmentParameterivEXT = GLContext.getFunctionAddress("glGetFramebufferAttachmentParameterivEXT")) != 0 &
			(glGenerateMipmapEXT = GLContext.getFunctionAddress("glGenerateMipmapEXT")) != 0;
	}

	private boolean EXT_geometry_shader4_initNativeFunctionAddresses() {
		return
			(glProgramParameteriEXT = GLContext.getFunctionAddress("glProgramParameteriEXT")) != 0 &
			(glFramebufferTextureEXT = GLContext.getFunctionAddress("glFramebufferTextureEXT")) != 0 &
			(glFramebufferTextureLayerEXT = GLContext.getFunctionAddress("glFramebufferTextureLayerEXT")) != 0 &
			(glFramebufferTextureFaceEXT = GLContext.getFunctionAddress("glFramebufferTextureFaceEXT")) != 0;
	}

	private boolean EXT_gpu_program_parameters_initNativeFunctionAddresses() {
		return
			(glProgramEnvParameters4fvEXT = GLContext.getFunctionAddress("glProgramEnvParameters4fvEXT")) != 0 &
			(glProgramLocalParameters4fvEXT = GLContext.getFunctionAddress("glProgramLocalParameters4fvEXT")) != 0;
	}

	private boolean EXT_gpu_shader4_initNativeFunctionAddresses() {
		return
			(glVertexAttribI1iEXT = GLContext.getFunctionAddress("glVertexAttribI1iEXT")) != 0 &
			(glVertexAttribI2iEXT = GLContext.getFunctionAddress("glVertexAttribI2iEXT")) != 0 &
			(glVertexAttribI3iEXT = GLContext.getFunctionAddress("glVertexAttribI3iEXT")) != 0 &
			(glVertexAttribI4iEXT = GLContext.getFunctionAddress("glVertexAttribI4iEXT")) != 0 &
			(glVertexAttribI1uiEXT = GLContext.getFunctionAddress("glVertexAttribI1uiEXT")) != 0 &
			(glVertexAttribI2uiEXT = GLContext.getFunctionAddress("glVertexAttribI2uiEXT")) != 0 &
			(glVertexAttribI3uiEXT = GLContext.getFunctionAddress("glVertexAttribI3uiEXT")) != 0 &
			(glVertexAttribI4uiEXT = GLContext.getFunctionAddress("glVertexAttribI4uiEXT")) != 0 &
			(glVertexAttribI1ivEXT = GLContext.getFunctionAddress("glVertexAttribI1ivEXT")) != 0 &
			(glVertexAttribI2ivEXT = GLContext.getFunctionAddress("glVertexAttribI2ivEXT")) != 0 &
			(glVertexAttribI3ivEXT = GLContext.getFunctionAddress("glVertexAttribI3ivEXT")) != 0 &
			(glVertexAttribI4ivEXT = GLContext.getFunctionAddress("glVertexAttribI4ivEXT")) != 0 &
			(glVertexAttribI1uivEXT = GLContext.getFunctionAddress("glVertexAttribI1uivEXT")) != 0 &
			(glVertexAttribI2uivEXT = GLContext.getFunctionAddress("glVertexAttribI2uivEXT")) != 0 &
			(glVertexAttribI3uivEXT = GLContext.getFunctionAddress("glVertexAttribI3uivEXT")) != 0 &
			(glVertexAttribI4uivEXT = GLContext.getFunctionAddress("glVertexAttribI4uivEXT")) != 0 &
			(glVertexAttribI4bvEXT = GLContext.getFunctionAddress("glVertexAttribI4bvEXT")) != 0 &
			(glVertexAttribI4svEXT = GLContext.getFunctionAddress("glVertexAttribI4svEXT")) != 0 &
			(glVertexAttribI4ubvEXT = GLContext.getFunctionAddress("glVertexAttribI4ubvEXT")) != 0 &
			(glVertexAttribI4usvEXT = GLContext.getFunctionAddress("glVertexAttribI4usvEXT")) != 0 &
			(glVertexAttribIPointerEXT = GLContext.getFunctionAddress("glVertexAttribIPointerEXT")) != 0 &
			(glGetVertexAttribIivEXT = GLContext.getFunctionAddress("glGetVertexAttribIivEXT")) != 0 &
			(glGetVertexAttribIuivEXT = GLContext.getFunctionAddress("glGetVertexAttribIuivEXT")) != 0 &
			(glUniform1uiEXT = GLContext.getFunctionAddress("glUniform1uiEXT")) != 0 &
			(glUniform2uiEXT = GLContext.getFunctionAddress("glUniform2uiEXT")) != 0 &
			(glUniform3uiEXT = GLContext.getFunctionAddress("glUniform3uiEXT")) != 0 &
			(glUniform4uiEXT = GLContext.getFunctionAddress("glUniform4uiEXT")) != 0 &
			(glUniform1uivEXT = GLContext.getFunctionAddress("glUniform1uivEXT")) != 0 &
			(glUniform2uivEXT = GLContext.getFunctionAddress("glUniform2uivEXT")) != 0 &
			(glUniform3uivEXT = GLContext.getFunctionAddress("glUniform3uivEXT")) != 0 &
			(glUniform4uivEXT = GLContext.getFunctionAddress("glUniform4uivEXT")) != 0 &
			(glGetUniformuivEXT = GLContext.getFunctionAddress("glGetUniformuivEXT")) != 0 &
			(glBindFragDataLocationEXT = GLContext.getFunctionAddress("glBindFragDataLocationEXT")) != 0 &
			(glGetFragDataLocationEXT = GLContext.getFunctionAddress("glGetFragDataLocationEXT")) != 0;
	}

	private boolean EXT_multi_draw_arrays_initNativeFunctionAddresses() {
		return
			(glMultiDrawArraysEXT = GLContext.getFunctionAddress("glMultiDrawArraysEXT")) != 0;
	}

	private boolean EXT_paletted_texture_initNativeFunctionAddresses() {
		return
			(glColorTableEXT = GLContext.getFunctionAddress("glColorTableEXT")) != 0 &
			(glColorSubTableEXT = GLContext.getFunctionAddress("glColorSubTableEXT")) != 0 &
			(glGetColorTableEXT = GLContext.getFunctionAddress("glGetColorTableEXT")) != 0 &
			(glGetColorTableParameterivEXT = GLContext.getFunctionAddress("glGetColorTableParameterivEXT")) != 0 &
			(glGetColorTableParameterfvEXT = GLContext.getFunctionAddress("glGetColorTableParameterfvEXT")) != 0;
	}

	private boolean EXT_point_parameters_initNativeFunctionAddresses() {
		return
			(glPointParameterfEXT = GLContext.getFunctionAddress("glPointParameterfEXT")) != 0 &
			(glPointParameterfvEXT = GLContext.getFunctionAddress("glPointParameterfvEXT")) != 0;
	}

	private boolean EXT_provoking_vertex_initNativeFunctionAddresses() {
		return
			(glProvokingVertexEXT = GLContext.getFunctionAddress("glProvokingVertexEXT")) != 0;
	}

	private boolean EXT_secondary_color_initNativeFunctionAddresses() {
		return
			(glSecondaryColor3bEXT = GLContext.getFunctionAddress("glSecondaryColor3bEXT")) != 0 &
			(glSecondaryColor3fEXT = GLContext.getFunctionAddress("glSecondaryColor3fEXT")) != 0 &
			(glSecondaryColor3dEXT = GLContext.getFunctionAddress("glSecondaryColor3dEXT")) != 0 &
			(glSecondaryColor3ubEXT = GLContext.getFunctionAddress("glSecondaryColor3ubEXT")) != 0 &
			(glSecondaryColorPointerEXT = GLContext.getFunctionAddress("glSecondaryColorPointerEXT")) != 0;
	}

	private boolean EXT_separate_shader_objects_initNativeFunctionAddresses() {
		return
			(glUseShaderProgramEXT = GLContext.getFunctionAddress("glUseShaderProgramEXT")) != 0 &
			(glActiveProgramEXT = GLContext.getFunctionAddress("glActiveProgramEXT")) != 0 &
			(glCreateShaderProgramEXT = GLContext.getFunctionAddress("glCreateShaderProgramEXT")) != 0;
	}

	private boolean EXT_shader_image_load_store_initNativeFunctionAddresses() {
		return
			(glBindImageTextureEXT = GLContext.getFunctionAddress("glBindImageTextureEXT")) != 0 &
			(glMemoryBarrierEXT = GLContext.getFunctionAddress("glMemoryBarrierEXT")) != 0;
	}

	private boolean EXT_stencil_clear_tag_initNativeFunctionAddresses() {
		return
			(glStencilClearTagEXT = GLContext.getFunctionAddress("glStencilClearTagEXT")) != 0;
	}

	private boolean EXT_stencil_two_side_initNativeFunctionAddresses() {
		return
			(glActiveStencilFaceEXT = GLContext.getFunctionAddress("glActiveStencilFaceEXT")) != 0;
	}

	private boolean EXT_texture_array_initNativeFunctionAddresses() {
		return
			(glFramebufferTextureLayerEXT = GLContext.getFunctionAddress("glFramebufferTextureLayerEXT")) != 0;
	}

	private boolean EXT_texture_buffer_object_initNativeFunctionAddresses() {
		return
			(glTexBufferEXT = GLContext.getFunctionAddress("glTexBufferEXT")) != 0;
	}

	private boolean EXT_texture_integer_initNativeFunctionAddresses() {
		return
			(glClearColorIiEXT = GLContext.getFunctionAddress("glClearColorIiEXT")) != 0 &
			(glClearColorIuiEXT = GLContext.getFunctionAddress("glClearColorIuiEXT")) != 0 &
			(glTexParameterIivEXT = GLContext.getFunctionAddress("glTexParameterIivEXT")) != 0 &
			(glTexParameterIuivEXT = GLContext.getFunctionAddress("glTexParameterIuivEXT")) != 0 &
			(glGetTexParameterIivEXT = GLContext.getFunctionAddress("glGetTexParameterIivEXT")) != 0 &
			(glGetTexParameterIuivEXT = GLContext.getFunctionAddress("glGetTexParameterIuivEXT")) != 0;
	}

	private boolean EXT_timer_query_initNativeFunctionAddresses() {
		return
			(glGetQueryObjecti64vEXT = GLContext.getFunctionAddress("glGetQueryObjecti64vEXT")) != 0 &
			(glGetQueryObjectui64vEXT = GLContext.getFunctionAddress("glGetQueryObjectui64vEXT")) != 0;
	}

	private boolean EXT_transform_feedback_initNativeFunctionAddresses() {
		return
			(glBindBufferRangeEXT = GLContext.getFunctionAddress("glBindBufferRangeEXT")) != 0 &
			(glBindBufferOffsetEXT = GLContext.getFunctionAddress("glBindBufferOffsetEXT")) != 0 &
			(glBindBufferBaseEXT = GLContext.getFunctionAddress("glBindBufferBaseEXT")) != 0 &
			(glBeginTransformFeedbackEXT = GLContext.getFunctionAddress("glBeginTransformFeedbackEXT")) != 0 &
			(glEndTransformFeedbackEXT = GLContext.getFunctionAddress("glEndTransformFeedbackEXT")) != 0 &
			(glTransformFeedbackVaryingsEXT = GLContext.getFunctionAddress("glTransformFeedbackVaryingsEXT")) != 0 &
			(glGetTransformFeedbackVaryingEXT = GLContext.getFunctionAddress("glGetTransformFeedbackVaryingEXT")) != 0;
	}

	private boolean EXT_vertex_attrib_64bit_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glVertexAttribL1dEXT = GLContext.getFunctionAddress("glVertexAttribL1dEXT")) != 0 &
			(glVertexAttribL2dEXT = GLContext.getFunctionAddress("glVertexAttribL2dEXT")) != 0 &
			(glVertexAttribL3dEXT = GLContext.getFunctionAddress("glVertexAttribL3dEXT")) != 0 &
			(glVertexAttribL4dEXT = GLContext.getFunctionAddress("glVertexAttribL4dEXT")) != 0 &
			(glVertexAttribL1dvEXT = GLContext.getFunctionAddress("glVertexAttribL1dvEXT")) != 0 &
			(glVertexAttribL2dvEXT = GLContext.getFunctionAddress("glVertexAttribL2dvEXT")) != 0 &
			(glVertexAttribL3dvEXT = GLContext.getFunctionAddress("glVertexAttribL3dvEXT")) != 0 &
			(glVertexAttribL4dvEXT = GLContext.getFunctionAddress("glVertexAttribL4dvEXT")) != 0 &
			(glVertexAttribLPointerEXT = GLContext.getFunctionAddress("glVertexAttribLPointerEXT")) != 0 &
			(glGetVertexAttribLdvEXT = GLContext.getFunctionAddress("glGetVertexAttribLdvEXT")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glVertexArrayVertexAttribLOffsetEXT = GLContext.getFunctionAddress("glVertexArrayVertexAttribLOffsetEXT")) != 0);
	}

	private boolean EXT_vertex_shader_initNativeFunctionAddresses() {
		return
			(glBeginVertexShaderEXT = GLContext.getFunctionAddress("glBeginVertexShaderEXT")) != 0 &
			(glEndVertexShaderEXT = GLContext.getFunctionAddress("glEndVertexShaderEXT")) != 0 &
			(glBindVertexShaderEXT = GLContext.getFunctionAddress("glBindVertexShaderEXT")) != 0 &
			(glGenVertexShadersEXT = GLContext.getFunctionAddress("glGenVertexShadersEXT")) != 0 &
			(glDeleteVertexShaderEXT = GLContext.getFunctionAddress("glDeleteVertexShaderEXT")) != 0 &
			(glShaderOp1EXT = GLContext.getFunctionAddress("glShaderOp1EXT")) != 0 &
			(glShaderOp2EXT = GLContext.getFunctionAddress("glShaderOp2EXT")) != 0 &
			(glShaderOp3EXT = GLContext.getFunctionAddress("glShaderOp3EXT")) != 0 &
			(glSwizzleEXT = GLContext.getFunctionAddress("glSwizzleEXT")) != 0 &
			(glWriteMaskEXT = GLContext.getFunctionAddress("glWriteMaskEXT")) != 0 &
			(glInsertComponentEXT = GLContext.getFunctionAddress("glInsertComponentEXT")) != 0 &
			(glExtractComponentEXT = GLContext.getFunctionAddress("glExtractComponentEXT")) != 0 &
			(glGenSymbolsEXT = GLContext.getFunctionAddress("glGenSymbolsEXT")) != 0 &
			(glSetInvariantEXT = GLContext.getFunctionAddress("glSetInvariantEXT")) != 0 &
			(glSetLocalConstantEXT = GLContext.getFunctionAddress("glSetLocalConstantEXT")) != 0 &
			(glVariantbvEXT = GLContext.getFunctionAddress("glVariantbvEXT")) != 0 &
			(glVariantsvEXT = GLContext.getFunctionAddress("glVariantsvEXT")) != 0 &
			(glVariantivEXT = GLContext.getFunctionAddress("glVariantivEXT")) != 0 &
			(glVariantfvEXT = GLContext.getFunctionAddress("glVariantfvEXT")) != 0 &
			(glVariantdvEXT = GLContext.getFunctionAddress("glVariantdvEXT")) != 0 &
			(glVariantubvEXT = GLContext.getFunctionAddress("glVariantubvEXT")) != 0 &
			(glVariantusvEXT = GLContext.getFunctionAddress("glVariantusvEXT")) != 0 &
			(glVariantuivEXT = GLContext.getFunctionAddress("glVariantuivEXT")) != 0 &
			(glVariantPointerEXT = GLContext.getFunctionAddress("glVariantPointerEXT")) != 0 &
			(glEnableVariantClientStateEXT = GLContext.getFunctionAddress("glEnableVariantClientStateEXT")) != 0 &
			(glDisableVariantClientStateEXT = GLContext.getFunctionAddress("glDisableVariantClientStateEXT")) != 0 &
			(glBindLightParameterEXT = GLContext.getFunctionAddress("glBindLightParameterEXT")) != 0 &
			(glBindMaterialParameterEXT = GLContext.getFunctionAddress("glBindMaterialParameterEXT")) != 0 &
			(glBindTexGenParameterEXT = GLContext.getFunctionAddress("glBindTexGenParameterEXT")) != 0 &
			(glBindTextureUnitParameterEXT = GLContext.getFunctionAddress("glBindTextureUnitParameterEXT")) != 0 &
			(glBindParameterEXT = GLContext.getFunctionAddress("glBindParameterEXT")) != 0 &
			(glIsVariantEnabledEXT = GLContext.getFunctionAddress("glIsVariantEnabledEXT")) != 0 &
			(glGetVariantBooleanvEXT = GLContext.getFunctionAddress("glGetVariantBooleanvEXT")) != 0 &
			(glGetVariantIntegervEXT = GLContext.getFunctionAddress("glGetVariantIntegervEXT")) != 0 &
			(glGetVariantFloatvEXT = GLContext.getFunctionAddress("glGetVariantFloatvEXT")) != 0 &
			(glGetVariantPointervEXT = GLContext.getFunctionAddress("glGetVariantPointervEXT")) != 0 &
			(glGetInvariantBooleanvEXT = GLContext.getFunctionAddress("glGetInvariantBooleanvEXT")) != 0 &
			(glGetInvariantIntegervEXT = GLContext.getFunctionAddress("glGetInvariantIntegervEXT")) != 0 &
			(glGetInvariantFloatvEXT = GLContext.getFunctionAddress("glGetInvariantFloatvEXT")) != 0 &
			(glGetLocalConstantBooleanvEXT = GLContext.getFunctionAddress("glGetLocalConstantBooleanvEXT")) != 0 &
			(glGetLocalConstantIntegervEXT = GLContext.getFunctionAddress("glGetLocalConstantIntegervEXT")) != 0 &
			(glGetLocalConstantFloatvEXT = GLContext.getFunctionAddress("glGetLocalConstantFloatvEXT")) != 0;
	}

	private boolean EXT_vertex_weighting_initNativeFunctionAddresses() {
		return
			(glVertexWeightfEXT = GLContext.getFunctionAddress("glVertexWeightfEXT")) != 0 &
			(glVertexWeightPointerEXT = GLContext.getFunctionAddress("glVertexWeightPointerEXT")) != 0;
	}

	private boolean GL11_initNativeFunctionAddresses(boolean forwardCompatible) {
		return
			(forwardCompatible || (glAccum = GLContext.getFunctionAddress("glAccum")) != 0) &
			(forwardCompatible || (glAlphaFunc = GLContext.getFunctionAddress("glAlphaFunc")) != 0) &
			(glClearColor = GLContext.getFunctionAddress("glClearColor")) != 0 &
			(forwardCompatible || (glClearAccum = GLContext.getFunctionAddress("glClearAccum")) != 0) &
			(glClear = GLContext.getFunctionAddress("glClear")) != 0 &
			(forwardCompatible || (glCallLists = GLContext.getFunctionAddress("glCallLists")) != 0) &
			(forwardCompatible || (glCallList = GLContext.getFunctionAddress("glCallList")) != 0) &
			(glBlendFunc = GLContext.getFunctionAddress("glBlendFunc")) != 0 &
			(forwardCompatible || (glBitmap = GLContext.getFunctionAddress("glBitmap")) != 0) &
			(glBindTexture = GLContext.getFunctionAddress("glBindTexture")) != 0 &
			(forwardCompatible || (glPrioritizeTextures = GLContext.getFunctionAddress("glPrioritizeTextures")) != 0) &
			(forwardCompatible || (glAreTexturesResident = GLContext.getFunctionAddress("glAreTexturesResident")) != 0) &
			(forwardCompatible || (glBegin = GLContext.getFunctionAddress("glBegin")) != 0) &
			(forwardCompatible || (glEnd = GLContext.getFunctionAddress("glEnd")) != 0) &
			(glArrayElement = GLContext.getFunctionAddress("glArrayElement")) != 0 &
			(glClearDepth = GLContext.getFunctionAddress("glClearDepth")) != 0 &
			(forwardCompatible || (glDeleteLists = GLContext.getFunctionAddress("glDeleteLists")) != 0) &
			(glDeleteTextures = GLContext.getFunctionAddress("glDeleteTextures")) != 0 &
			(glCullFace = GLContext.getFunctionAddress("glCullFace")) != 0 &
			(glCopyTexSubImage2D = GLContext.getFunctionAddress("glCopyTexSubImage2D")) != 0 &
			(glCopyTexSubImage1D = GLContext.getFunctionAddress("glCopyTexSubImage1D")) != 0 &
			(glCopyTexImage2D = GLContext.getFunctionAddress("glCopyTexImage2D")) != 0 &
			(glCopyTexImage1D = GLContext.getFunctionAddress("glCopyTexImage1D")) != 0 &
			(glCopyPixels = GLContext.getFunctionAddress("glCopyPixels")) != 0 &
			(forwardCompatible || (glColorPointer = GLContext.getFunctionAddress("glColorPointer")) != 0) &
			(forwardCompatible || (glColorMaterial = GLContext.getFunctionAddress("glColorMaterial")) != 0) &
			(glColorMask = GLContext.getFunctionAddress("glColorMask")) != 0 &
			(forwardCompatible || (glColor3b = GLContext.getFunctionAddress("glColor3b")) != 0) &
			(forwardCompatible || (glColor3f = GLContext.getFunctionAddress("glColor3f")) != 0) &
			(forwardCompatible || (glColor3d = GLContext.getFunctionAddress("glColor3d")) != 0) &
			(forwardCompatible || (glColor3ub = GLContext.getFunctionAddress("glColor3ub")) != 0) &
			(forwardCompatible || (glColor4b = GLContext.getFunctionAddress("glColor4b")) != 0) &
			(forwardCompatible || (glColor4f = GLContext.getFunctionAddress("glColor4f")) != 0) &
			(forwardCompatible || (glColor4d = GLContext.getFunctionAddress("glColor4d")) != 0) &
			(forwardCompatible || (glColor4ub = GLContext.getFunctionAddress("glColor4ub")) != 0) &
			(glClipPlane = GLContext.getFunctionAddress("glClipPlane")) != 0 &
			(glClearStencil = GLContext.getFunctionAddress("glClearStencil")) != 0 &
			(forwardCompatible || (glEvalPoint1 = GLContext.getFunctionAddress("glEvalPoint1")) != 0) &
			(forwardCompatible || (glEvalPoint2 = GLContext.getFunctionAddress("glEvalPoint2")) != 0) &
			(forwardCompatible || (glEvalMesh1 = GLContext.getFunctionAddress("glEvalMesh1")) != 0) &
			(forwardCompatible || (glEvalMesh2 = GLContext.getFunctionAddress("glEvalMesh2")) != 0) &
			(forwardCompatible || (glEvalCoord1f = GLContext.getFunctionAddress("glEvalCoord1f")) != 0) &
			(forwardCompatible || (glEvalCoord1d = GLContext.getFunctionAddress("glEvalCoord1d")) != 0) &
			(forwardCompatible || (glEvalCoord2f = GLContext.getFunctionAddress("glEvalCoord2f")) != 0) &
			(forwardCompatible || (glEvalCoord2d = GLContext.getFunctionAddress("glEvalCoord2d")) != 0) &
			(forwardCompatible || (glEnableClientState = GLContext.getFunctionAddress("glEnableClientState")) != 0) &
			(forwardCompatible || (glDisableClientState = GLContext.getFunctionAddress("glDisableClientState")) != 0) &
			(glEnable = GLContext.getFunctionAddress("glEnable")) != 0 &
			(glDisable = GLContext.getFunctionAddress("glDisable")) != 0 &
			(forwardCompatible || (glEdgeFlagPointer = GLContext.getFunctionAddress("glEdgeFlagPointer")) != 0) &
			(forwardCompatible || (glEdgeFlag = GLContext.getFunctionAddress("glEdgeFlag")) != 0) &
			(forwardCompatible || (glDrawPixels = GLContext.getFunctionAddress("glDrawPixels")) != 0) &
			(glDrawElements = GLContext.getFunctionAddress("glDrawElements")) != 0 &
			(glDrawBuffer = GLContext.getFunctionAddress("glDrawBuffer")) != 0 &
			(glDrawArrays = GLContext.getFunctionAddress("glDrawArrays")) != 0 &
			(glDepthRange = GLContext.getFunctionAddress("glDepthRange")) != 0 &
			(glDepthMask = GLContext.getFunctionAddress("glDepthMask")) != 0 &
			(glDepthFunc = GLContext.getFunctionAddress("glDepthFunc")) != 0 &
			(forwardCompatible || (glFeedbackBuffer = GLContext.getFunctionAddress("glFeedbackBuffer")) != 0) &
			(forwardCompatible || (glGetPixelMapfv = GLContext.getFunctionAddress("glGetPixelMapfv")) != 0) &
			(forwardCompatible || (glGetPixelMapuiv = GLContext.getFunctionAddress("glGetPixelMapuiv")) != 0) &
			(forwardCompatible || (glGetPixelMapusv = GLContext.getFunctionAddress("glGetPixelMapusv")) != 0) &
			(forwardCompatible || (glGetMaterialfv = GLContext.getFunctionAddress("glGetMaterialfv")) != 0) &
			(forwardCompatible || (glGetMaterialiv = GLContext.getFunctionAddress("glGetMaterialiv")) != 0) &
			(forwardCompatible || (glGetMapfv = GLContext.getFunctionAddress("glGetMapfv")) != 0) &
			(forwardCompatible || (glGetMapdv = GLContext.getFunctionAddress("glGetMapdv")) != 0) &
			(forwardCompatible || (glGetMapiv = GLContext.getFunctionAddress("glGetMapiv")) != 0) &
			(forwardCompatible || (glGetLightfv = GLContext.getFunctionAddress("glGetLightfv")) != 0) &
			(forwardCompatible || (glGetLightiv = GLContext.getFunctionAddress("glGetLightiv")) != 0) &
			(glGetError = GLContext.getFunctionAddress("glGetError")) != 0 &
			(glGetClipPlane = GLContext.getFunctionAddress("glGetClipPlane")) != 0 &
			(glGetBooleanv = GLContext.getFunctionAddress("glGetBooleanv")) != 0 &
			(glGetDoublev = GLContext.getFunctionAddress("glGetDoublev")) != 0 &
			(glGetFloatv = GLContext.getFunctionAddress("glGetFloatv")) != 0 &
			(glGetIntegerv = GLContext.getFunctionAddress("glGetIntegerv")) != 0 &
			(glGenTextures = GLContext.getFunctionAddress("glGenTextures")) != 0 &
			(forwardCompatible || (glGenLists = GLContext.getFunctionAddress("glGenLists")) != 0) &
			(forwardCompatible || (glFrustum = GLContext.getFunctionAddress("glFrustum")) != 0) &
			(glFrontFace = GLContext.getFunctionAddress("glFrontFace")) != 0 &
			(forwardCompatible || (glFogf = GLContext.getFunctionAddress("glFogf")) != 0) &
			(forwardCompatible || (glFogi = GLContext.getFunctionAddress("glFogi")) != 0) &
			(forwardCompatible || (glFogfv = GLContext.getFunctionAddress("glFogfv")) != 0) &
			(forwardCompatible || (glFogiv = GLContext.getFunctionAddress("glFogiv")) != 0) &
			(glFlush = GLContext.getFunctionAddress("glFlush")) != 0 &
			(glFinish = GLContext.getFunctionAddress("glFinish")) != 0 &
			(glGetPointerv = GLContext.getFunctionAddress("glGetPointerv")) != 0 &
			(glIsEnabled = GLContext.getFunctionAddress("glIsEnabled")) != 0 &
			(glInterleavedArrays = GLContext.getFunctionAddress("glInterleavedArrays")) != 0 &
			(forwardCompatible || (glInitNames = GLContext.getFunctionAddress("glInitNames")) != 0) &
			(glHint = GLContext.getFunctionAddress("glHint")) != 0 &
			(glGetTexParameterfv = GLContext.getFunctionAddress("glGetTexParameterfv")) != 0 &
			(glGetTexParameteriv = GLContext.getFunctionAddress("glGetTexParameteriv")) != 0 &
			(glGetTexLevelParameterfv = GLContext.getFunctionAddress("glGetTexLevelParameterfv")) != 0 &
			(glGetTexLevelParameteriv = GLContext.getFunctionAddress("glGetTexLevelParameteriv")) != 0 &
			(glGetTexImage = GLContext.getFunctionAddress("glGetTexImage")) != 0 &
			(forwardCompatible || (glGetTexGeniv = GLContext.getFunctionAddress("glGetTexGeniv")) != 0) &
			(forwardCompatible || (glGetTexGenfv = GLContext.getFunctionAddress("glGetTexGenfv")) != 0) &
			(forwardCompatible || (glGetTexGendv = GLContext.getFunctionAddress("glGetTexGendv")) != 0) &
			(glGetTexEnviv = GLContext.getFunctionAddress("glGetTexEnviv")) != 0 &
			(glGetTexEnvfv = GLContext.getFunctionAddress("glGetTexEnvfv")) != 0 &
			(glGetString = GLContext.getFunctionAddress("glGetString")) != 0 &
			(forwardCompatible || (glGetPolygonStipple = GLContext.getFunctionAddress("glGetPolygonStipple")) != 0) &
			(forwardCompatible || (glIsList = GLContext.getFunctionAddress("glIsList")) != 0) &
			(forwardCompatible || (glMaterialf = GLContext.getFunctionAddress("glMaterialf")) != 0) &
			(forwardCompatible || (glMateriali = GLContext.getFunctionAddress("glMateriali")) != 0) &
			(forwardCompatible || (glMaterialfv = GLContext.getFunctionAddress("glMaterialfv")) != 0) &
			(forwardCompatible || (glMaterialiv = GLContext.getFunctionAddress("glMaterialiv")) != 0) &
			(forwardCompatible || (glMapGrid1f = GLContext.getFunctionAddress("glMapGrid1f")) != 0) &
			(forwardCompatible || (glMapGrid1d = GLContext.getFunctionAddress("glMapGrid1d")) != 0) &
			(forwardCompatible || (glMapGrid2f = GLContext.getFunctionAddress("glMapGrid2f")) != 0) &
			(forwardCompatible || (glMapGrid2d = GLContext.getFunctionAddress("glMapGrid2d")) != 0) &
			(forwardCompatible || (glMap2f = GLContext.getFunctionAddress("glMap2f")) != 0) &
			(forwardCompatible || (glMap2d = GLContext.getFunctionAddress("glMap2d")) != 0) &
			(forwardCompatible || (glMap1f = GLContext.getFunctionAddress("glMap1f")) != 0) &
			(forwardCompatible || (glMap1d = GLContext.getFunctionAddress("glMap1d")) != 0) &
			(glLogicOp = GLContext.getFunctionAddress("glLogicOp")) != 0 &
			(forwardCompatible || (glLoadName = GLContext.getFunctionAddress("glLoadName")) != 0) &
			(forwardCompatible || (glLoadMatrixf = GLContext.getFunctionAddress("glLoadMatrixf")) != 0) &
			(forwardCompatible || (glLoadMatrixd = GLContext.getFunctionAddress("glLoadMatrixd")) != 0) &
			(forwardCompatible || (glLoadIdentity = GLContext.getFunctionAddress("glLoadIdentity")) != 0) &
			(forwardCompatible || (glListBase = GLContext.getFunctionAddress("glListBase")) != 0) &
			(glLineWidth = GLContext.getFunctionAddress("glLineWidth")) != 0 &
			(forwardCompatible || (glLineStipple = GLContext.getFunctionAddress("glLineStipple")) != 0) &
			(forwardCompatible || (glLightModelf = GLContext.getFunctionAddress("glLightModelf")) != 0) &
			(forwardCompatible || (glLightModeli = GLContext.getFunctionAddress("glLightModeli")) != 0) &
			(forwardCompatible || (glLightModelfv = GLContext.getFunctionAddress("glLightModelfv")) != 0) &
			(forwardCompatible || (glLightModeliv = GLContext.getFunctionAddress("glLightModeliv")) != 0) &
			(forwardCompatible || (glLightf = GLContext.getFunctionAddress("glLightf")) != 0) &
			(forwardCompatible || (glLighti = GLContext.getFunctionAddress("glLighti")) != 0) &
			(forwardCompatible || (glLightfv = GLContext.getFunctionAddress("glLightfv")) != 0) &
			(forwardCompatible || (glLightiv = GLContext.getFunctionAddress("glLightiv")) != 0) &
			(glIsTexture = GLContext.getFunctionAddress("glIsTexture")) != 0 &
			(forwardCompatible || (glMatrixMode = GLContext.getFunctionAddress("glMatrixMode")) != 0) &
			(forwardCompatible || (glPolygonStipple = GLContext.getFunctionAddress("glPolygonStipple")) != 0) &
			(glPolygonOffset = GLContext.getFunctionAddress("glPolygonOffset")) != 0 &
			(glPolygonMode = GLContext.getFunctionAddress("glPolygonMode")) != 0 &
			(glPointSize = GLContext.getFunctionAddress("glPointSize")) != 0 &
			(forwardCompatible || (glPixelZoom = GLContext.getFunctionAddress("glPixelZoom")) != 0) &
			(forwardCompatible || (glPixelTransferf = GLContext.getFunctionAddress("glPixelTransferf")) != 0) &
			(forwardCompatible || (glPixelTransferi = GLContext.getFunctionAddress("glPixelTransferi")) != 0) &
			(glPixelStoref = GLContext.getFunctionAddress("glPixelStoref")) != 0 &
			(glPixelStorei = GLContext.getFunctionAddress("glPixelStorei")) != 0 &
			(forwardCompatible || (glPixelMapfv = GLContext.getFunctionAddress("glPixelMapfv")) != 0) &
			(forwardCompatible || (glPixelMapuiv = GLContext.getFunctionAddress("glPixelMapuiv")) != 0) &
			(forwardCompatible || (glPixelMapusv = GLContext.getFunctionAddress("glPixelMapusv")) != 0) &
			(forwardCompatible || (glPassThrough = GLContext.getFunctionAddress("glPassThrough")) != 0) &
			(forwardCompatible || (glOrtho = GLContext.getFunctionAddress("glOrtho")) != 0) &
			(forwardCompatible || (glNormalPointer = GLContext.getFunctionAddress("glNormalPointer")) != 0) &
			(forwardCompatible || (glNormal3b = GLContext.getFunctionAddress("glNormal3b")) != 0) &
			(forwardCompatible || (glNormal3f = GLContext.getFunctionAddress("glNormal3f")) != 0) &
			(forwardCompatible || (glNormal3d = GLContext.getFunctionAddress("glNormal3d")) != 0) &
			(forwardCompatible || (glNormal3i = GLContext.getFunctionAddress("glNormal3i")) != 0) &
			(forwardCompatible || (glNewList = GLContext.getFunctionAddress("glNewList")) != 0) &
			(forwardCompatible || (glEndList = GLContext.getFunctionAddress("glEndList")) != 0) &
			(forwardCompatible || (glMultMatrixf = GLContext.getFunctionAddress("glMultMatrixf")) != 0) &
			(forwardCompatible || (glMultMatrixd = GLContext.getFunctionAddress("glMultMatrixd")) != 0) &
			(glShadeModel = GLContext.getFunctionAddress("glShadeModel")) != 0 &
			(forwardCompatible || (glSelectBuffer = GLContext.getFunctionAddress("glSelectBuffer")) != 0) &
			(glScissor = GLContext.getFunctionAddress("glScissor")) != 0 &
			(forwardCompatible || (glScalef = GLContext.getFunctionAddress("glScalef")) != 0) &
			(forwardCompatible || (glScaled = GLContext.getFunctionAddress("glScaled")) != 0) &
			(forwardCompatible || (glRotatef = GLContext.getFunctionAddress("glRotatef")) != 0) &
			(forwardCompatible || (glRotated = GLContext.getFunctionAddress("glRotated")) != 0) &
			(forwardCompatible || (glRenderMode = GLContext.getFunctionAddress("glRenderMode")) != 0) &
			(forwardCompatible || (glRectf = GLContext.getFunctionAddress("glRectf")) != 0) &
			(forwardCompatible || (glRectd = GLContext.getFunctionAddress("glRectd")) != 0) &
			(forwardCompatible || (glRecti = GLContext.getFunctionAddress("glRecti")) != 0) &
			(glReadPixels = GLContext.getFunctionAddress("glReadPixels")) != 0 &
			(glReadBuffer = GLContext.getFunctionAddress("glReadBuffer")) != 0 &
			(forwardCompatible || (glRasterPos2f = GLContext.getFunctionAddress("glRasterPos2f")) != 0) &
			(forwardCompatible || (glRasterPos2d = GLContext.getFunctionAddress("glRasterPos2d")) != 0) &
			(forwardCompatible || (glRasterPos2i = GLContext.getFunctionAddress("glRasterPos2i")) != 0) &
			(forwardCompatible || (glRasterPos3f = GLContext.getFunctionAddress("glRasterPos3f")) != 0) &
			(forwardCompatible || (glRasterPos3d = GLContext.getFunctionAddress("glRasterPos3d")) != 0) &
			(forwardCompatible || (glRasterPos3i = GLContext.getFunctionAddress("glRasterPos3i")) != 0) &
			(forwardCompatible || (glRasterPos4f = GLContext.getFunctionAddress("glRasterPos4f")) != 0) &
			(forwardCompatible || (glRasterPos4d = GLContext.getFunctionAddress("glRasterPos4d")) != 0) &
			(forwardCompatible || (glRasterPos4i = GLContext.getFunctionAddress("glRasterPos4i")) != 0) &
			(forwardCompatible || (glPushName = GLContext.getFunctionAddress("glPushName")) != 0) &
			(forwardCompatible || (glPopName = GLContext.getFunctionAddress("glPopName")) != 0) &
			(forwardCompatible || (glPushMatrix = GLContext.getFunctionAddress("glPushMatrix")) != 0) &
			(forwardCompatible || (glPopMatrix = GLContext.getFunctionAddress("glPopMatrix")) != 0) &
			(forwardCompatible || (glPushClientAttrib = GLContext.getFunctionAddress("glPushClientAttrib")) != 0) &
			(forwardCompatible || (glPopClientAttrib = GLContext.getFunctionAddress("glPopClientAttrib")) != 0) &
			(forwardCompatible || (glPushAttrib = GLContext.getFunctionAddress("glPushAttrib")) != 0) &
			(forwardCompatible || (glPopAttrib = GLContext.getFunctionAddress("glPopAttrib")) != 0) &
			(glStencilFunc = GLContext.getFunctionAddress("glStencilFunc")) != 0 &
			(forwardCompatible || (glVertexPointer = GLContext.getFunctionAddress("glVertexPointer")) != 0) &
			(forwardCompatible || (glVertex2f = GLContext.getFunctionAddress("glVertex2f")) != 0) &
			(forwardCompatible || (glVertex2d = GLContext.getFunctionAddress("glVertex2d")) != 0) &
			(forwardCompatible || (glVertex2i = GLContext.getFunctionAddress("glVertex2i")) != 0) &
			(forwardCompatible || (glVertex3f = GLContext.getFunctionAddress("glVertex3f")) != 0) &
			(forwardCompatible || (glVertex3d = GLContext.getFunctionAddress("glVertex3d")) != 0) &
			(forwardCompatible || (glVertex3i = GLContext.getFunctionAddress("glVertex3i")) != 0) &
			(forwardCompatible || (glVertex4f = GLContext.getFunctionAddress("glVertex4f")) != 0) &
			(forwardCompatible || (glVertex4d = GLContext.getFunctionAddress("glVertex4d")) != 0) &
			(forwardCompatible || (glVertex4i = GLContext.getFunctionAddress("glVertex4i")) != 0) &
			(forwardCompatible || (glTranslatef = GLContext.getFunctionAddress("glTranslatef")) != 0) &
			(forwardCompatible || (glTranslated = GLContext.getFunctionAddress("glTranslated")) != 0) &
			(glTexImage1D = GLContext.getFunctionAddress("glTexImage1D")) != 0 &
			(glTexImage2D = GLContext.getFunctionAddress("glTexImage2D")) != 0 &
			(glTexSubImage1D = GLContext.getFunctionAddress("glTexSubImage1D")) != 0 &
			(glTexSubImage2D = GLContext.getFunctionAddress("glTexSubImage2D")) != 0 &
			(glTexParameterf = GLContext.getFunctionAddress("glTexParameterf")) != 0 &
			(glTexParameteri = GLContext.getFunctionAddress("glTexParameteri")) != 0 &
			(glTexParameterfv = GLContext.getFunctionAddress("glTexParameterfv")) != 0 &
			(glTexParameteriv = GLContext.getFunctionAddress("glTexParameteriv")) != 0 &
			(forwardCompatible || (glTexGenf = GLContext.getFunctionAddress("glTexGenf")) != 0) &
			(forwardCompatible || (glTexGend = GLContext.getFunctionAddress("glTexGend")) != 0) &
			(forwardCompatible || (glTexGenfv = GLContext.getFunctionAddress("glTexGenfv")) != 0) &
			(forwardCompatible || (glTexGendv = GLContext.getFunctionAddress("glTexGendv")) != 0) &
			(forwardCompatible || (glTexGeni = GLContext.getFunctionAddress("glTexGeni")) != 0) &
			(forwardCompatible || (glTexGeniv = GLContext.getFunctionAddress("glTexGeniv")) != 0) &
			(glTexEnvf = GLContext.getFunctionAddress("glTexEnvf")) != 0 &
			(glTexEnvi = GLContext.getFunctionAddress("glTexEnvi")) != 0 &
			(glTexEnvfv = GLContext.getFunctionAddress("glTexEnvfv")) != 0 &
			(glTexEnviv = GLContext.getFunctionAddress("glTexEnviv")) != 0 &
			(forwardCompatible || (glTexCoordPointer = GLContext.getFunctionAddress("glTexCoordPointer")) != 0) &
			(forwardCompatible || (glTexCoord1f = GLContext.getFunctionAddress("glTexCoord1f")) != 0) &
			(forwardCompatible || (glTexCoord1d = GLContext.getFunctionAddress("glTexCoord1d")) != 0) &
			(forwardCompatible || (glTexCoord2f = GLContext.getFunctionAddress("glTexCoord2f")) != 0) &
			(forwardCompatible || (glTexCoord2d = GLContext.getFunctionAddress("glTexCoord2d")) != 0) &
			(forwardCompatible || (glTexCoord3f = GLContext.getFunctionAddress("glTexCoord3f")) != 0) &
			(forwardCompatible || (glTexCoord3d = GLContext.getFunctionAddress("glTexCoord3d")) != 0) &
			(forwardCompatible || (glTexCoord4f = GLContext.getFunctionAddress("glTexCoord4f")) != 0) &
			(forwardCompatible || (glTexCoord4d = GLContext.getFunctionAddress("glTexCoord4d")) != 0) &
			(glStencilOp = GLContext.getFunctionAddress("glStencilOp")) != 0 &
			(glStencilMask = GLContext.getFunctionAddress("glStencilMask")) != 0 &
			(glViewport = GLContext.getFunctionAddress("glViewport")) != 0;
	}

	private boolean GL12_initNativeFunctionAddresses() {
		return
			(glDrawRangeElements = GLContext.getFunctionAddress("glDrawRangeElements")) != 0 &
			(glTexImage3D = GLContext.getFunctionAddress("glTexImage3D")) != 0 &
			(glTexSubImage3D = GLContext.getFunctionAddress("glTexSubImage3D")) != 0 &
			(glCopyTexSubImage3D = GLContext.getFunctionAddress("glCopyTexSubImage3D")) != 0;
	}

	private boolean GL13_initNativeFunctionAddresses(boolean forwardCompatible) {
		return
			(glActiveTexture = GLContext.getFunctionAddress("glActiveTexture")) != 0 &
			(forwardCompatible || (glClientActiveTexture = GLContext.getFunctionAddress("glClientActiveTexture")) != 0) &
			(glCompressedTexImage1D = GLContext.getFunctionAddress("glCompressedTexImage1D")) != 0 &
			(glCompressedTexImage2D = GLContext.getFunctionAddress("glCompressedTexImage2D")) != 0 &
			(glCompressedTexImage3D = GLContext.getFunctionAddress("glCompressedTexImage3D")) != 0 &
			(glCompressedTexSubImage1D = GLContext.getFunctionAddress("glCompressedTexSubImage1D")) != 0 &
			(glCompressedTexSubImage2D = GLContext.getFunctionAddress("glCompressedTexSubImage2D")) != 0 &
			(glCompressedTexSubImage3D = GLContext.getFunctionAddress("glCompressedTexSubImage3D")) != 0 &
			(glGetCompressedTexImage = GLContext.getFunctionAddress("glGetCompressedTexImage")) != 0 &
			(forwardCompatible || (glMultiTexCoord1f = GLContext.getFunctionAddress("glMultiTexCoord1f")) != 0) &
			(forwardCompatible || (glMultiTexCoord1d = GLContext.getFunctionAddress("glMultiTexCoord1d")) != 0) &
			(forwardCompatible || (glMultiTexCoord2f = GLContext.getFunctionAddress("glMultiTexCoord2f")) != 0) &
			(forwardCompatible || (glMultiTexCoord2d = GLContext.getFunctionAddress("glMultiTexCoord2d")) != 0) &
			(forwardCompatible || (glMultiTexCoord3f = GLContext.getFunctionAddress("glMultiTexCoord3f")) != 0) &
			(forwardCompatible || (glMultiTexCoord3d = GLContext.getFunctionAddress("glMultiTexCoord3d")) != 0) &
			(forwardCompatible || (glMultiTexCoord4f = GLContext.getFunctionAddress("glMultiTexCoord4f")) != 0) &
			(forwardCompatible || (glMultiTexCoord4d = GLContext.getFunctionAddress("glMultiTexCoord4d")) != 0) &
			(forwardCompatible || (glLoadTransposeMatrixf = GLContext.getFunctionAddress("glLoadTransposeMatrixf")) != 0) &
			(forwardCompatible || (glLoadTransposeMatrixd = GLContext.getFunctionAddress("glLoadTransposeMatrixd")) != 0) &
			(forwardCompatible || (glMultTransposeMatrixf = GLContext.getFunctionAddress("glMultTransposeMatrixf")) != 0) &
			(forwardCompatible || (glMultTransposeMatrixd = GLContext.getFunctionAddress("glMultTransposeMatrixd")) != 0) &
			(glSampleCoverage = GLContext.getFunctionAddress("glSampleCoverage")) != 0;
	}

	private boolean GL14_initNativeFunctionAddresses(boolean forwardCompatible) {
		return
			(glBlendEquation = GLContext.getFunctionAddress("glBlendEquation")) != 0 &
			(glBlendColor = GLContext.getFunctionAddress("glBlendColor")) != 0 &
			(forwardCompatible || (glFogCoordf = GLContext.getFunctionAddress("glFogCoordf")) != 0) &
			(forwardCompatible || (glFogCoordd = GLContext.getFunctionAddress("glFogCoordd")) != 0) &
			(forwardCompatible || (glFogCoordPointer = GLContext.getFunctionAddress("glFogCoordPointer")) != 0) &
			(glMultiDrawArrays = GLContext.getFunctionAddress("glMultiDrawArrays")) != 0 &
			(glPointParameteri = GLContext.getFunctionAddress("glPointParameteri")) != 0 &
			(glPointParameterf = GLContext.getFunctionAddress("glPointParameterf")) != 0 &
			(glPointParameteriv = GLContext.getFunctionAddress("glPointParameteriv")) != 0 &
			(glPointParameterfv = GLContext.getFunctionAddress("glPointParameterfv")) != 0 &
			(forwardCompatible || (glSecondaryColor3b = GLContext.getFunctionAddress("glSecondaryColor3b")) != 0) &
			(forwardCompatible || (glSecondaryColor3f = GLContext.getFunctionAddress("glSecondaryColor3f")) != 0) &
			(forwardCompatible || (glSecondaryColor3d = GLContext.getFunctionAddress("glSecondaryColor3d")) != 0) &
			(forwardCompatible || (glSecondaryColor3ub = GLContext.getFunctionAddress("glSecondaryColor3ub")) != 0) &
			(forwardCompatible || (glSecondaryColorPointer = GLContext.getFunctionAddress("glSecondaryColorPointer")) != 0) &
			(glBlendFuncSeparate = GLContext.getFunctionAddress("glBlendFuncSeparate")) != 0 &
			(forwardCompatible || (glWindowPos2f = GLContext.getFunctionAddress("glWindowPos2f")) != 0) &
			(forwardCompatible || (glWindowPos2d = GLContext.getFunctionAddress("glWindowPos2d")) != 0) &
			(forwardCompatible || (glWindowPos2i = GLContext.getFunctionAddress("glWindowPos2i")) != 0) &
			(forwardCompatible || (glWindowPos3f = GLContext.getFunctionAddress("glWindowPos3f")) != 0) &
			(forwardCompatible || (glWindowPos3d = GLContext.getFunctionAddress("glWindowPos3d")) != 0) &
			(forwardCompatible || (glWindowPos3i = GLContext.getFunctionAddress("glWindowPos3i")) != 0);
	}

	private boolean GL15_initNativeFunctionAddresses() {
		return
			(glBindBuffer = GLContext.getFunctionAddress("glBindBuffer")) != 0 &
			(glDeleteBuffers = GLContext.getFunctionAddress("glDeleteBuffers")) != 0 &
			(glGenBuffers = GLContext.getFunctionAddress("glGenBuffers")) != 0 &
			(glIsBuffer = GLContext.getFunctionAddress("glIsBuffer")) != 0 &
			(glBufferData = GLContext.getFunctionAddress("glBufferData")) != 0 &
			(glBufferSubData = GLContext.getFunctionAddress("glBufferSubData")) != 0 &
			(glGetBufferSubData = GLContext.getFunctionAddress("glGetBufferSubData")) != 0 &
			(glMapBuffer = GLContext.getFunctionAddress("glMapBuffer")) != 0 &
			(glUnmapBuffer = GLContext.getFunctionAddress("glUnmapBuffer")) != 0 &
			(glGetBufferParameteriv = GLContext.getFunctionAddress("glGetBufferParameteriv")) != 0 &
			(glGetBufferPointerv = GLContext.getFunctionAddress("glGetBufferPointerv")) != 0 &
			(glGenQueries = GLContext.getFunctionAddress("glGenQueries")) != 0 &
			(glDeleteQueries = GLContext.getFunctionAddress("glDeleteQueries")) != 0 &
			(glIsQuery = GLContext.getFunctionAddress("glIsQuery")) != 0 &
			(glBeginQuery = GLContext.getFunctionAddress("glBeginQuery")) != 0 &
			(glEndQuery = GLContext.getFunctionAddress("glEndQuery")) != 0 &
			(glGetQueryiv = GLContext.getFunctionAddress("glGetQueryiv")) != 0 &
			(glGetQueryObjectiv = GLContext.getFunctionAddress("glGetQueryObjectiv")) != 0 &
			(glGetQueryObjectuiv = GLContext.getFunctionAddress("glGetQueryObjectuiv")) != 0;
	}

	private boolean GL20_initNativeFunctionAddresses() {
		return
			(glShaderSource = GLContext.getFunctionAddress("glShaderSource")) != 0 &
			(glCreateShader = GLContext.getFunctionAddress("glCreateShader")) != 0 &
			(glIsShader = GLContext.getFunctionAddress("glIsShader")) != 0 &
			(glCompileShader = GLContext.getFunctionAddress("glCompileShader")) != 0 &
			(glDeleteShader = GLContext.getFunctionAddress("glDeleteShader")) != 0 &
			(glCreateProgram = GLContext.getFunctionAddress("glCreateProgram")) != 0 &
			(glIsProgram = GLContext.getFunctionAddress("glIsProgram")) != 0 &
			(glAttachShader = GLContext.getFunctionAddress("glAttachShader")) != 0 &
			(glDetachShader = GLContext.getFunctionAddress("glDetachShader")) != 0 &
			(glLinkProgram = GLContext.getFunctionAddress("glLinkProgram")) != 0 &
			(glUseProgram = GLContext.getFunctionAddress("glUseProgram")) != 0 &
			(glValidateProgram = GLContext.getFunctionAddress("glValidateProgram")) != 0 &
			(glDeleteProgram = GLContext.getFunctionAddress("glDeleteProgram")) != 0 &
			(glUniform1f = GLContext.getFunctionAddress("glUniform1f")) != 0 &
			(glUniform2f = GLContext.getFunctionAddress("glUniform2f")) != 0 &
			(glUniform3f = GLContext.getFunctionAddress("glUniform3f")) != 0 &
			(glUniform4f = GLContext.getFunctionAddress("glUniform4f")) != 0 &
			(glUniform1i = GLContext.getFunctionAddress("glUniform1i")) != 0 &
			(glUniform2i = GLContext.getFunctionAddress("glUniform2i")) != 0 &
			(glUniform3i = GLContext.getFunctionAddress("glUniform3i")) != 0 &
			(glUniform4i = GLContext.getFunctionAddress("glUniform4i")) != 0 &
			(glUniform1fv = GLContext.getFunctionAddress("glUniform1fv")) != 0 &
			(glUniform2fv = GLContext.getFunctionAddress("glUniform2fv")) != 0 &
			(glUniform3fv = GLContext.getFunctionAddress("glUniform3fv")) != 0 &
			(glUniform4fv = GLContext.getFunctionAddress("glUniform4fv")) != 0 &
			(glUniform1iv = GLContext.getFunctionAddress("glUniform1iv")) != 0 &
			(glUniform2iv = GLContext.getFunctionAddress("glUniform2iv")) != 0 &
			(glUniform3iv = GLContext.getFunctionAddress("glUniform3iv")) != 0 &
			(glUniform4iv = GLContext.getFunctionAddress("glUniform4iv")) != 0 &
			(glUniformMatrix2fv = GLContext.getFunctionAddress("glUniformMatrix2fv")) != 0 &
			(glUniformMatrix3fv = GLContext.getFunctionAddress("glUniformMatrix3fv")) != 0 &
			(glUniformMatrix4fv = GLContext.getFunctionAddress("glUniformMatrix4fv")) != 0 &
			(glGetShaderiv = GLContext.getFunctionAddress("glGetShaderiv")) != 0 &
			(glGetProgramiv = GLContext.getFunctionAddress("glGetProgramiv")) != 0 &
			(glGetShaderInfoLog = GLContext.getFunctionAddress("glGetShaderInfoLog")) != 0 &
			(glGetProgramInfoLog = GLContext.getFunctionAddress("glGetProgramInfoLog")) != 0 &
			(glGetAttachedShaders = GLContext.getFunctionAddress("glGetAttachedShaders")) != 0 &
			(glGetUniformLocation = GLContext.getFunctionAddress("glGetUniformLocation")) != 0 &
			(glGetActiveUniform = GLContext.getFunctionAddress("glGetActiveUniform")) != 0 &
			(glGetUniformfv = GLContext.getFunctionAddress("glGetUniformfv")) != 0 &
			(glGetUniformiv = GLContext.getFunctionAddress("glGetUniformiv")) != 0 &
			(glGetShaderSource = GLContext.getFunctionAddress("glGetShaderSource")) != 0 &
			(glVertexAttrib1s = GLContext.getFunctionAddress("glVertexAttrib1s")) != 0 &
			(glVertexAttrib1f = GLContext.getFunctionAddress("glVertexAttrib1f")) != 0 &
			(glVertexAttrib1d = GLContext.getFunctionAddress("glVertexAttrib1d")) != 0 &
			(glVertexAttrib2s = GLContext.getFunctionAddress("glVertexAttrib2s")) != 0 &
			(glVertexAttrib2f = GLContext.getFunctionAddress("glVertexAttrib2f")) != 0 &
			(glVertexAttrib2d = GLContext.getFunctionAddress("glVertexAttrib2d")) != 0 &
			(glVertexAttrib3s = GLContext.getFunctionAddress("glVertexAttrib3s")) != 0 &
			(glVertexAttrib3f = GLContext.getFunctionAddress("glVertexAttrib3f")) != 0 &
			(glVertexAttrib3d = GLContext.getFunctionAddress("glVertexAttrib3d")) != 0 &
			(glVertexAttrib4s = GLContext.getFunctionAddress("glVertexAttrib4s")) != 0 &
			(glVertexAttrib4f = GLContext.getFunctionAddress("glVertexAttrib4f")) != 0 &
			(glVertexAttrib4d = GLContext.getFunctionAddress("glVertexAttrib4d")) != 0 &
			(glVertexAttrib4Nub = GLContext.getFunctionAddress("glVertexAttrib4Nub")) != 0 &
			(glVertexAttribPointer = GLContext.getFunctionAddress("glVertexAttribPointer")) != 0 &
			(glEnableVertexAttribArray = GLContext.getFunctionAddress("glEnableVertexAttribArray")) != 0 &
			(glDisableVertexAttribArray = GLContext.getFunctionAddress("glDisableVertexAttribArray")) != 0 &
			(glGetVertexAttribfv = GLContext.getFunctionAddress("glGetVertexAttribfv")) != 0 &
			(glGetVertexAttribdv = GLContext.getFunctionAddress("glGetVertexAttribdv")) != 0 &
			(glGetVertexAttribiv = GLContext.getFunctionAddress("glGetVertexAttribiv")) != 0 &
			(glGetVertexAttribPointerv = GLContext.getFunctionAddress("glGetVertexAttribPointerv")) != 0 &
			(glBindAttribLocation = GLContext.getFunctionAddress("glBindAttribLocation")) != 0 &
			(glGetActiveAttrib = GLContext.getFunctionAddress("glGetActiveAttrib")) != 0 &
			(glGetAttribLocation = GLContext.getFunctionAddress("glGetAttribLocation")) != 0 &
			(glDrawBuffers = GLContext.getFunctionAddress("glDrawBuffers")) != 0 &
			(glStencilOpSeparate = GLContext.getFunctionAddress("glStencilOpSeparate")) != 0 &
			(glStencilFuncSeparate = GLContext.getFunctionAddress("glStencilFuncSeparate")) != 0 &
			(glStencilMaskSeparate = GLContext.getFunctionAddress("glStencilMaskSeparate")) != 0 &
			(glBlendEquationSeparate = GLContext.getFunctionAddress("glBlendEquationSeparate")) != 0;
	}

	private boolean GL21_initNativeFunctionAddresses() {
		return
			(glUniformMatrix2x3fv = GLContext.getFunctionAddress("glUniformMatrix2x3fv")) != 0 &
			(glUniformMatrix3x2fv = GLContext.getFunctionAddress("glUniformMatrix3x2fv")) != 0 &
			(glUniformMatrix2x4fv = GLContext.getFunctionAddress("glUniformMatrix2x4fv")) != 0 &
			(glUniformMatrix4x2fv = GLContext.getFunctionAddress("glUniformMatrix4x2fv")) != 0 &
			(glUniformMatrix3x4fv = GLContext.getFunctionAddress("glUniformMatrix3x4fv")) != 0 &
			(glUniformMatrix4x3fv = GLContext.getFunctionAddress("glUniformMatrix4x3fv")) != 0;
	}

	private boolean GL30_initNativeFunctionAddresses() {
		return
			(glGetStringi = GLContext.getFunctionAddress("glGetStringi")) != 0 &
			(glClearBufferfv = GLContext.getFunctionAddress("glClearBufferfv")) != 0 &
			(glClearBufferiv = GLContext.getFunctionAddress("glClearBufferiv")) != 0 &
			(glClearBufferuiv = GLContext.getFunctionAddress("glClearBufferuiv")) != 0 &
			(glClearBufferfi = GLContext.getFunctionAddress("glClearBufferfi")) != 0 &
			(glVertexAttribI1i = GLContext.getFunctionAddress("glVertexAttribI1i")) != 0 &
			(glVertexAttribI2i = GLContext.getFunctionAddress("glVertexAttribI2i")) != 0 &
			(glVertexAttribI3i = GLContext.getFunctionAddress("glVertexAttribI3i")) != 0 &
			(glVertexAttribI4i = GLContext.getFunctionAddress("glVertexAttribI4i")) != 0 &
			(glVertexAttribI1ui = GLContext.getFunctionAddress("glVertexAttribI1ui")) != 0 &
			(glVertexAttribI2ui = GLContext.getFunctionAddress("glVertexAttribI2ui")) != 0 &
			(glVertexAttribI3ui = GLContext.getFunctionAddress("glVertexAttribI3ui")) != 0 &
			(glVertexAttribI4ui = GLContext.getFunctionAddress("glVertexAttribI4ui")) != 0 &
			(glVertexAttribI1iv = GLContext.getFunctionAddress("glVertexAttribI1iv")) != 0 &
			(glVertexAttribI2iv = GLContext.getFunctionAddress("glVertexAttribI2iv")) != 0 &
			(glVertexAttribI3iv = GLContext.getFunctionAddress("glVertexAttribI3iv")) != 0 &
			(glVertexAttribI4iv = GLContext.getFunctionAddress("glVertexAttribI4iv")) != 0 &
			(glVertexAttribI1uiv = GLContext.getFunctionAddress("glVertexAttribI1uiv")) != 0 &
			(glVertexAttribI2uiv = GLContext.getFunctionAddress("glVertexAttribI2uiv")) != 0 &
			(glVertexAttribI3uiv = GLContext.getFunctionAddress("glVertexAttribI3uiv")) != 0 &
			(glVertexAttribI4uiv = GLContext.getFunctionAddress("glVertexAttribI4uiv")) != 0 &
			(glVertexAttribI4bv = GLContext.getFunctionAddress("glVertexAttribI4bv")) != 0 &
			(glVertexAttribI4sv = GLContext.getFunctionAddress("glVertexAttribI4sv")) != 0 &
			(glVertexAttribI4ubv = GLContext.getFunctionAddress("glVertexAttribI4ubv")) != 0 &
			(glVertexAttribI4usv = GLContext.getFunctionAddress("glVertexAttribI4usv")) != 0 &
			(glVertexAttribIPointer = GLContext.getFunctionAddress("glVertexAttribIPointer")) != 0 &
			(glGetVertexAttribIiv = GLContext.getFunctionAddress("glGetVertexAttribIiv")) != 0 &
			(glGetVertexAttribIuiv = GLContext.getFunctionAddress("glGetVertexAttribIuiv")) != 0 &
			(glUniform1ui = GLContext.getFunctionAddress("glUniform1ui")) != 0 &
			(glUniform2ui = GLContext.getFunctionAddress("glUniform2ui")) != 0 &
			(glUniform3ui = GLContext.getFunctionAddress("glUniform3ui")) != 0 &
			(glUniform4ui = GLContext.getFunctionAddress("glUniform4ui")) != 0 &
			(glUniform1uiv = GLContext.getFunctionAddress("glUniform1uiv")) != 0 &
			(glUniform2uiv = GLContext.getFunctionAddress("glUniform2uiv")) != 0 &
			(glUniform3uiv = GLContext.getFunctionAddress("glUniform3uiv")) != 0 &
			(glUniform4uiv = GLContext.getFunctionAddress("glUniform4uiv")) != 0 &
			(glGetUniformuiv = GLContext.getFunctionAddress("glGetUniformuiv")) != 0 &
			(glBindFragDataLocation = GLContext.getFunctionAddress("glBindFragDataLocation")) != 0 &
			(glGetFragDataLocation = GLContext.getFunctionAddress("glGetFragDataLocation")) != 0 &
			(glBeginConditionalRender = GLContext.getFunctionAddress("glBeginConditionalRender")) != 0 &
			(glEndConditionalRender = GLContext.getFunctionAddress("glEndConditionalRender")) != 0 &
			(glMapBufferRange = GLContext.getFunctionAddress("glMapBufferRange")) != 0 &
			(glFlushMappedBufferRange = GLContext.getFunctionAddress("glFlushMappedBufferRange")) != 0 &
			(glClampColor = GLContext.getFunctionAddress("glClampColor")) != 0 &
			(glIsRenderbuffer = GLContext.getFunctionAddress("glIsRenderbuffer")) != 0 &
			(glBindRenderbuffer = GLContext.getFunctionAddress("glBindRenderbuffer")) != 0 &
			(glDeleteRenderbuffers = GLContext.getFunctionAddress("glDeleteRenderbuffers")) != 0 &
			(glGenRenderbuffers = GLContext.getFunctionAddress("glGenRenderbuffers")) != 0 &
			(glRenderbufferStorage = GLContext.getFunctionAddress("glRenderbufferStorage")) != 0 &
			(glGetRenderbufferParameteriv = GLContext.getFunctionAddress("glGetRenderbufferParameteriv")) != 0 &
			(glIsFramebuffer = GLContext.getFunctionAddress("glIsFramebuffer")) != 0 &
			(glBindFramebuffer = GLContext.getFunctionAddress("glBindFramebuffer")) != 0 &
			(glDeleteFramebuffers = GLContext.getFunctionAddress("glDeleteFramebuffers")) != 0 &
			(glGenFramebuffers = GLContext.getFunctionAddress("glGenFramebuffers")) != 0 &
			(glCheckFramebufferStatus = GLContext.getFunctionAddress("glCheckFramebufferStatus")) != 0 &
			(glFramebufferTexture1D = GLContext.getFunctionAddress("glFramebufferTexture1D")) != 0 &
			(glFramebufferTexture2D = GLContext.getFunctionAddress("glFramebufferTexture2D")) != 0 &
			(glFramebufferTexture3D = GLContext.getFunctionAddress("glFramebufferTexture3D")) != 0 &
			(glFramebufferRenderbuffer = GLContext.getFunctionAddress("glFramebufferRenderbuffer")) != 0 &
			(glGetFramebufferAttachmentParameteriv = GLContext.getFunctionAddress("glGetFramebufferAttachmentParameteriv")) != 0 &
			(glGenerateMipmap = GLContext.getFunctionAddress("glGenerateMipmap")) != 0 &
			(glRenderbufferStorageMultisample = GLContext.getFunctionAddress("glRenderbufferStorageMultisample")) != 0 &
			(glBlitFramebuffer = GLContext.getFunctionAddress("glBlitFramebuffer")) != 0 &
			(glTexParameterIiv = GLContext.getFunctionAddress("glTexParameterIiv")) != 0 &
			(glTexParameterIuiv = GLContext.getFunctionAddress("glTexParameterIuiv")) != 0 &
			(glGetTexParameterIiv = GLContext.getFunctionAddress("glGetTexParameterIiv")) != 0 &
			(glGetTexParameterIuiv = GLContext.getFunctionAddress("glGetTexParameterIuiv")) != 0 &
			(glFramebufferTextureLayer = GLContext.getFunctionAddress("glFramebufferTextureLayer")) != 0 &
			(glColorMaski = GLContext.getFunctionAddress("glColorMaski")) != 0 &
			(glGetBooleani_v = GLContext.getFunctionAddress("glGetBooleani_v")) != 0 &
			(glGetIntegeri_v = GLContext.getFunctionAddress("glGetIntegeri_v")) != 0 &
			(glEnablei = GLContext.getFunctionAddress("glEnablei")) != 0 &
			(glDisablei = GLContext.getFunctionAddress("glDisablei")) != 0 &
			(glIsEnabledi = GLContext.getFunctionAddress("glIsEnabledi")) != 0 &
			(glBindBufferRange = GLContext.getFunctionAddress("glBindBufferRange")) != 0 &
			(glBindBufferBase = GLContext.getFunctionAddress("glBindBufferBase")) != 0 &
			(glBeginTransformFeedback = GLContext.getFunctionAddress("glBeginTransformFeedback")) != 0 &
			(glEndTransformFeedback = GLContext.getFunctionAddress("glEndTransformFeedback")) != 0 &
			(glTransformFeedbackVaryings = GLContext.getFunctionAddress("glTransformFeedbackVaryings")) != 0 &
			(glGetTransformFeedbackVarying = GLContext.getFunctionAddress("glGetTransformFeedbackVarying")) != 0 &
			(glBindVertexArray = GLContext.getFunctionAddress("glBindVertexArray")) != 0 &
			(glDeleteVertexArrays = GLContext.getFunctionAddress("glDeleteVertexArrays")) != 0 &
			(glGenVertexArrays = GLContext.getFunctionAddress("glGenVertexArrays")) != 0 &
			(glIsVertexArray = GLContext.getFunctionAddress("glIsVertexArray")) != 0;
	}

	private boolean GL31_initNativeFunctionAddresses() {
		return
			(glDrawArraysInstanced = GLContext.getFunctionAddress("glDrawArraysInstanced")) != 0 &
			(glDrawElementsInstanced = GLContext.getFunctionAddress("glDrawElementsInstanced")) != 0 &
			(glCopyBufferSubData = GLContext.getFunctionAddress("glCopyBufferSubData")) != 0 &
			(glPrimitiveRestartIndex = GLContext.getFunctionAddress("glPrimitiveRestartIndex")) != 0 &
			(glTexBuffer = GLContext.getFunctionAddress("glTexBuffer")) != 0 &
			(glGetUniformIndices = GLContext.getFunctionAddress("glGetUniformIndices")) != 0 &
			(glGetActiveUniformsiv = GLContext.getFunctionAddress("glGetActiveUniformsiv")) != 0 &
			(glGetActiveUniformName = GLContext.getFunctionAddress("glGetActiveUniformName")) != 0 &
			(glGetUniformBlockIndex = GLContext.getFunctionAddress("glGetUniformBlockIndex")) != 0 &
			(glGetActiveUniformBlockiv = GLContext.getFunctionAddress("glGetActiveUniformBlockiv")) != 0 &
			(glGetActiveUniformBlockName = GLContext.getFunctionAddress("glGetActiveUniformBlockName")) != 0 &
			(glUniformBlockBinding = GLContext.getFunctionAddress("glUniformBlockBinding")) != 0;
	}

	private boolean GL32_initNativeFunctionAddresses() {
		return
			(glGetBufferParameteri64v = GLContext.getFunctionAddress("glGetBufferParameteri64v")) != 0 &
			(glDrawElementsBaseVertex = GLContext.getFunctionAddress("glDrawElementsBaseVertex")) != 0 &
			(glDrawRangeElementsBaseVertex = GLContext.getFunctionAddress("glDrawRangeElementsBaseVertex")) != 0 &
			(glDrawElementsInstancedBaseVertex = GLContext.getFunctionAddress("glDrawElementsInstancedBaseVertex")) != 0 &
			(glProvokingVertex = GLContext.getFunctionAddress("glProvokingVertex")) != 0 &
			(glTexImage2DMultisample = GLContext.getFunctionAddress("glTexImage2DMultisample")) != 0 &
			(glTexImage3DMultisample = GLContext.getFunctionAddress("glTexImage3DMultisample")) != 0 &
			(glGetMultisamplefv = GLContext.getFunctionAddress("glGetMultisamplefv")) != 0 &
			(glSampleMaski = GLContext.getFunctionAddress("glSampleMaski")) != 0 &
			(glFramebufferTexture = GLContext.getFunctionAddress("glFramebufferTexture")) != 0 &
			(glFenceSync = GLContext.getFunctionAddress("glFenceSync")) != 0 &
			(glIsSync = GLContext.getFunctionAddress("glIsSync")) != 0 &
			(glDeleteSync = GLContext.getFunctionAddress("glDeleteSync")) != 0 &
			(glClientWaitSync = GLContext.getFunctionAddress("glClientWaitSync")) != 0 &
			(glWaitSync = GLContext.getFunctionAddress("glWaitSync")) != 0 &
			(glGetInteger64v = GLContext.getFunctionAddress("glGetInteger64v")) != 0 &
			((glGetInteger64i_v = GLContext.getFunctionAddress("glGetInteger64i_v")) != 0 || true) &
			(glGetSynciv = GLContext.getFunctionAddress("glGetSynciv")) != 0;
	}

	private boolean GL33_initNativeFunctionAddresses(boolean forwardCompatible) {
		return
			(glBindFragDataLocationIndexed = GLContext.getFunctionAddress("glBindFragDataLocationIndexed")) != 0 &
			(glGetFragDataIndex = GLContext.getFunctionAddress("glGetFragDataIndex")) != 0 &
			(glGenSamplers = GLContext.getFunctionAddress("glGenSamplers")) != 0 &
			(glDeleteSamplers = GLContext.getFunctionAddress("glDeleteSamplers")) != 0 &
			(glIsSampler = GLContext.getFunctionAddress("glIsSampler")) != 0 &
			(glBindSampler = GLContext.getFunctionAddress("glBindSampler")) != 0 &
			(glSamplerParameteri = GLContext.getFunctionAddress("glSamplerParameteri")) != 0 &
			(glSamplerParameterf = GLContext.getFunctionAddress("glSamplerParameterf")) != 0 &
			(glSamplerParameteriv = GLContext.getFunctionAddress("glSamplerParameteriv")) != 0 &
			(glSamplerParameterfv = GLContext.getFunctionAddress("glSamplerParameterfv")) != 0 &
			(glSamplerParameterIiv = GLContext.getFunctionAddress("glSamplerParameterIiv")) != 0 &
			(glSamplerParameterIuiv = GLContext.getFunctionAddress("glSamplerParameterIuiv")) != 0 &
			(glGetSamplerParameteriv = GLContext.getFunctionAddress("glGetSamplerParameteriv")) != 0 &
			(glGetSamplerParameterfv = GLContext.getFunctionAddress("glGetSamplerParameterfv")) != 0 &
			(glGetSamplerParameterIiv = GLContext.getFunctionAddress("glGetSamplerParameterIiv")) != 0 &
			(glGetSamplerParameterIuiv = GLContext.getFunctionAddress("glGetSamplerParameterIuiv")) != 0 &
			(glQueryCounter = GLContext.getFunctionAddress("glQueryCounter")) != 0 &
			(glGetQueryObjecti64v = GLContext.getFunctionAddress("glGetQueryObjecti64v")) != 0 &
			(glGetQueryObjectui64v = GLContext.getFunctionAddress("glGetQueryObjectui64v")) != 0 &
			(glVertexAttribDivisor = GLContext.getFunctionAddress("glVertexAttribDivisor")) != 0 &
			(forwardCompatible || (glVertexP2ui = GLContext.getFunctionAddress("glVertexP2ui")) != 0) &
			(forwardCompatible || (glVertexP3ui = GLContext.getFunctionAddress("glVertexP3ui")) != 0) &
			(forwardCompatible || (glVertexP4ui = GLContext.getFunctionAddress("glVertexP4ui")) != 0) &
			(forwardCompatible || (glVertexP2uiv = GLContext.getFunctionAddress("glVertexP2uiv")) != 0) &
			(forwardCompatible || (glVertexP3uiv = GLContext.getFunctionAddress("glVertexP3uiv")) != 0) &
			(forwardCompatible || (glVertexP4uiv = GLContext.getFunctionAddress("glVertexP4uiv")) != 0) &
			(forwardCompatible || (glTexCoordP1ui = GLContext.getFunctionAddress("glTexCoordP1ui")) != 0) &
			(forwardCompatible || (glTexCoordP2ui = GLContext.getFunctionAddress("glTexCoordP2ui")) != 0) &
			(forwardCompatible || (glTexCoordP3ui = GLContext.getFunctionAddress("glTexCoordP3ui")) != 0) &
			(forwardCompatible || (glTexCoordP4ui = GLContext.getFunctionAddress("glTexCoordP4ui")) != 0) &
			(forwardCompatible || (glTexCoordP1uiv = GLContext.getFunctionAddress("glTexCoordP1uiv")) != 0) &
			(forwardCompatible || (glTexCoordP2uiv = GLContext.getFunctionAddress("glTexCoordP2uiv")) != 0) &
			(forwardCompatible || (glTexCoordP3uiv = GLContext.getFunctionAddress("glTexCoordP3uiv")) != 0) &
			(forwardCompatible || (glTexCoordP4uiv = GLContext.getFunctionAddress("glTexCoordP4uiv")) != 0) &
			(forwardCompatible || (glMultiTexCoordP1ui = GLContext.getFunctionAddress("glMultiTexCoordP1ui")) != 0) &
			(forwardCompatible || (glMultiTexCoordP2ui = GLContext.getFunctionAddress("glMultiTexCoordP2ui")) != 0) &
			(forwardCompatible || (glMultiTexCoordP3ui = GLContext.getFunctionAddress("glMultiTexCoordP3ui")) != 0) &
			(forwardCompatible || (glMultiTexCoordP4ui = GLContext.getFunctionAddress("glMultiTexCoordP4ui")) != 0) &
			(forwardCompatible || (glMultiTexCoordP1uiv = GLContext.getFunctionAddress("glMultiTexCoordP1uiv")) != 0) &
			(forwardCompatible || (glMultiTexCoordP2uiv = GLContext.getFunctionAddress("glMultiTexCoordP2uiv")) != 0) &
			(forwardCompatible || (glMultiTexCoordP3uiv = GLContext.getFunctionAddress("glMultiTexCoordP3uiv")) != 0) &
			(forwardCompatible || (glMultiTexCoordP4uiv = GLContext.getFunctionAddress("glMultiTexCoordP4uiv")) != 0) &
			(forwardCompatible || (glNormalP3ui = GLContext.getFunctionAddress("glNormalP3ui")) != 0) &
			(forwardCompatible || (glNormalP3uiv = GLContext.getFunctionAddress("glNormalP3uiv")) != 0) &
			(forwardCompatible || (glColorP3ui = GLContext.getFunctionAddress("glColorP3ui")) != 0) &
			(forwardCompatible || (glColorP4ui = GLContext.getFunctionAddress("glColorP4ui")) != 0) &
			(forwardCompatible || (glColorP3uiv = GLContext.getFunctionAddress("glColorP3uiv")) != 0) &
			(forwardCompatible || (glColorP4uiv = GLContext.getFunctionAddress("glColorP4uiv")) != 0) &
			(forwardCompatible || (glSecondaryColorP3ui = GLContext.getFunctionAddress("glSecondaryColorP3ui")) != 0) &
			(forwardCompatible || (glSecondaryColorP3uiv = GLContext.getFunctionAddress("glSecondaryColorP3uiv")) != 0) &
			(forwardCompatible || (glVertexAttribP1ui = GLContext.getFunctionAddress("glVertexAttribP1ui")) != 0) &
			(forwardCompatible || (glVertexAttribP2ui = GLContext.getFunctionAddress("glVertexAttribP2ui")) != 0) &
			(forwardCompatible || (glVertexAttribP3ui = GLContext.getFunctionAddress("glVertexAttribP3ui")) != 0) &
			(forwardCompatible || (glVertexAttribP4ui = GLContext.getFunctionAddress("glVertexAttribP4ui")) != 0) &
			(forwardCompatible || (glVertexAttribP1uiv = GLContext.getFunctionAddress("glVertexAttribP1uiv")) != 0) &
			(forwardCompatible || (glVertexAttribP2uiv = GLContext.getFunctionAddress("glVertexAttribP2uiv")) != 0) &
			(forwardCompatible || (glVertexAttribP3uiv = GLContext.getFunctionAddress("glVertexAttribP3uiv")) != 0) &
			(forwardCompatible || (glVertexAttribP4uiv = GLContext.getFunctionAddress("glVertexAttribP4uiv")) != 0);
	}

	private boolean GL40_initNativeFunctionAddresses() {
		return
			(glBlendEquationi = GLContext.getFunctionAddress("glBlendEquationi")) != 0 &
			(glBlendEquationSeparatei = GLContext.getFunctionAddress("glBlendEquationSeparatei")) != 0 &
			(glBlendFunci = GLContext.getFunctionAddress("glBlendFunci")) != 0 &
			(glBlendFuncSeparatei = GLContext.getFunctionAddress("glBlendFuncSeparatei")) != 0 &
			(glDrawArraysIndirect = GLContext.getFunctionAddress("glDrawArraysIndirect")) != 0 &
			(glDrawElementsIndirect = GLContext.getFunctionAddress("glDrawElementsIndirect")) != 0 &
			(glUniform1d = GLContext.getFunctionAddress("glUniform1d")) != 0 &
			(glUniform2d = GLContext.getFunctionAddress("glUniform2d")) != 0 &
			(glUniform3d = GLContext.getFunctionAddress("glUniform3d")) != 0 &
			(glUniform4d = GLContext.getFunctionAddress("glUniform4d")) != 0 &
			(glUniform1dv = GLContext.getFunctionAddress("glUniform1dv")) != 0 &
			(glUniform2dv = GLContext.getFunctionAddress("glUniform2dv")) != 0 &
			(glUniform3dv = GLContext.getFunctionAddress("glUniform3dv")) != 0 &
			(glUniform4dv = GLContext.getFunctionAddress("glUniform4dv")) != 0 &
			(glUniformMatrix2dv = GLContext.getFunctionAddress("glUniformMatrix2dv")) != 0 &
			(glUniformMatrix3dv = GLContext.getFunctionAddress("glUniformMatrix3dv")) != 0 &
			(glUniformMatrix4dv = GLContext.getFunctionAddress("glUniformMatrix4dv")) != 0 &
			(glUniformMatrix2x3dv = GLContext.getFunctionAddress("glUniformMatrix2x3dv")) != 0 &
			(glUniformMatrix2x4dv = GLContext.getFunctionAddress("glUniformMatrix2x4dv")) != 0 &
			(glUniformMatrix3x2dv = GLContext.getFunctionAddress("glUniformMatrix3x2dv")) != 0 &
			(glUniformMatrix3x4dv = GLContext.getFunctionAddress("glUniformMatrix3x4dv")) != 0 &
			(glUniformMatrix4x2dv = GLContext.getFunctionAddress("glUniformMatrix4x2dv")) != 0 &
			(glUniformMatrix4x3dv = GLContext.getFunctionAddress("glUniformMatrix4x3dv")) != 0 &
			(glGetUniformdv = GLContext.getFunctionAddress("glGetUniformdv")) != 0 &
			(glMinSampleShading = GLContext.getFunctionAddress("glMinSampleShading")) != 0 &
			(glGetSubroutineUniformLocation = GLContext.getFunctionAddress("glGetSubroutineUniformLocation")) != 0 &
			(glGetSubroutineIndex = GLContext.getFunctionAddress("glGetSubroutineIndex")) != 0 &
			(glGetActiveSubroutineUniformiv = GLContext.getFunctionAddress("glGetActiveSubroutineUniformiv")) != 0 &
			(glGetActiveSubroutineUniformName = GLContext.getFunctionAddress("glGetActiveSubroutineUniformName")) != 0 &
			(glGetActiveSubroutineName = GLContext.getFunctionAddress("glGetActiveSubroutineName")) != 0 &
			(glUniformSubroutinesuiv = GLContext.getFunctionAddress("glUniformSubroutinesuiv")) != 0 &
			(glGetUniformSubroutineuiv = GLContext.getFunctionAddress("glGetUniformSubroutineuiv")) != 0 &
			(glGetProgramStageiv = GLContext.getFunctionAddress("glGetProgramStageiv")) != 0 &
			(glPatchParameteri = GLContext.getFunctionAddress("glPatchParameteri")) != 0 &
			(glPatchParameterfv = GLContext.getFunctionAddress("glPatchParameterfv")) != 0 &
			(glBindTransformFeedback = GLContext.getFunctionAddress("glBindTransformFeedback")) != 0 &
			(glDeleteTransformFeedbacks = GLContext.getFunctionAddress("glDeleteTransformFeedbacks")) != 0 &
			(glGenTransformFeedbacks = GLContext.getFunctionAddress("glGenTransformFeedbacks")) != 0 &
			(glIsTransformFeedback = GLContext.getFunctionAddress("glIsTransformFeedback")) != 0 &
			(glPauseTransformFeedback = GLContext.getFunctionAddress("glPauseTransformFeedback")) != 0 &
			(glResumeTransformFeedback = GLContext.getFunctionAddress("glResumeTransformFeedback")) != 0 &
			(glDrawTransformFeedback = GLContext.getFunctionAddress("glDrawTransformFeedback")) != 0 &
			(glDrawTransformFeedbackStream = GLContext.getFunctionAddress("glDrawTransformFeedbackStream")) != 0 &
			(glBeginQueryIndexed = GLContext.getFunctionAddress("glBeginQueryIndexed")) != 0 &
			(glEndQueryIndexed = GLContext.getFunctionAddress("glEndQueryIndexed")) != 0 &
			(glGetQueryIndexediv = GLContext.getFunctionAddress("glGetQueryIndexediv")) != 0;
	}

	private boolean GL41_initNativeFunctionAddresses() {
		return
			(glReleaseShaderCompiler = GLContext.getFunctionAddress("glReleaseShaderCompiler")) != 0 &
			(glShaderBinary = GLContext.getFunctionAddress("glShaderBinary")) != 0 &
			(glGetShaderPrecisionFormat = GLContext.getFunctionAddress("glGetShaderPrecisionFormat")) != 0 &
			(glDepthRangef = GLContext.getFunctionAddress("glDepthRangef")) != 0 &
			(glClearDepthf = GLContext.getFunctionAddress("glClearDepthf")) != 0 &
			(glGetProgramBinary = GLContext.getFunctionAddress("glGetProgramBinary")) != 0 &
			(glProgramBinary = GLContext.getFunctionAddress("glProgramBinary")) != 0 &
			(glProgramParameteri = GLContext.getFunctionAddress("glProgramParameteri")) != 0 &
			(glUseProgramStages = GLContext.getFunctionAddress("glUseProgramStages")) != 0 &
			(glActiveShaderProgram = GLContext.getFunctionAddress("glActiveShaderProgram")) != 0 &
			(glCreateShaderProgramv = GLContext.getFunctionAddress("glCreateShaderProgramv")) != 0 &
			(glBindProgramPipeline = GLContext.getFunctionAddress("glBindProgramPipeline")) != 0 &
			(glDeleteProgramPipelines = GLContext.getFunctionAddress("glDeleteProgramPipelines")) != 0 &
			(glGenProgramPipelines = GLContext.getFunctionAddress("glGenProgramPipelines")) != 0 &
			(glIsProgramPipeline = GLContext.getFunctionAddress("glIsProgramPipeline")) != 0 &
			(glGetProgramPipelineiv = GLContext.getFunctionAddress("glGetProgramPipelineiv")) != 0 &
			(glProgramUniform1i = GLContext.getFunctionAddress("glProgramUniform1i")) != 0 &
			(glProgramUniform2i = GLContext.getFunctionAddress("glProgramUniform2i")) != 0 &
			(glProgramUniform3i = GLContext.getFunctionAddress("glProgramUniform3i")) != 0 &
			(glProgramUniform4i = GLContext.getFunctionAddress("glProgramUniform4i")) != 0 &
			(glProgramUniform1f = GLContext.getFunctionAddress("glProgramUniform1f")) != 0 &
			(glProgramUniform2f = GLContext.getFunctionAddress("glProgramUniform2f")) != 0 &
			(glProgramUniform3f = GLContext.getFunctionAddress("glProgramUniform3f")) != 0 &
			(glProgramUniform4f = GLContext.getFunctionAddress("glProgramUniform4f")) != 0 &
			(glProgramUniform1d = GLContext.getFunctionAddress("glProgramUniform1d")) != 0 &
			(glProgramUniform2d = GLContext.getFunctionAddress("glProgramUniform2d")) != 0 &
			(glProgramUniform3d = GLContext.getFunctionAddress("glProgramUniform3d")) != 0 &
			(glProgramUniform4d = GLContext.getFunctionAddress("glProgramUniform4d")) != 0 &
			(glProgramUniform1iv = GLContext.getFunctionAddress("glProgramUniform1iv")) != 0 &
			(glProgramUniform2iv = GLContext.getFunctionAddress("glProgramUniform2iv")) != 0 &
			(glProgramUniform3iv = GLContext.getFunctionAddress("glProgramUniform3iv")) != 0 &
			(glProgramUniform4iv = GLContext.getFunctionAddress("glProgramUniform4iv")) != 0 &
			(glProgramUniform1fv = GLContext.getFunctionAddress("glProgramUniform1fv")) != 0 &
			(glProgramUniform2fv = GLContext.getFunctionAddress("glProgramUniform2fv")) != 0 &
			(glProgramUniform3fv = GLContext.getFunctionAddress("glProgramUniform3fv")) != 0 &
			(glProgramUniform4fv = GLContext.getFunctionAddress("glProgramUniform4fv")) != 0 &
			(glProgramUniform1dv = GLContext.getFunctionAddress("glProgramUniform1dv")) != 0 &
			(glProgramUniform2dv = GLContext.getFunctionAddress("glProgramUniform2dv")) != 0 &
			(glProgramUniform3dv = GLContext.getFunctionAddress("glProgramUniform3dv")) != 0 &
			(glProgramUniform4dv = GLContext.getFunctionAddress("glProgramUniform4dv")) != 0 &
			(glProgramUniform1ui = GLContext.getFunctionAddress("glProgramUniform1ui")) != 0 &
			(glProgramUniform2ui = GLContext.getFunctionAddress("glProgramUniform2ui")) != 0 &
			(glProgramUniform3ui = GLContext.getFunctionAddress("glProgramUniform3ui")) != 0 &
			(glProgramUniform4ui = GLContext.getFunctionAddress("glProgramUniform4ui")) != 0 &
			(glProgramUniform1uiv = GLContext.getFunctionAddress("glProgramUniform1uiv")) != 0 &
			(glProgramUniform2uiv = GLContext.getFunctionAddress("glProgramUniform2uiv")) != 0 &
			(glProgramUniform3uiv = GLContext.getFunctionAddress("glProgramUniform3uiv")) != 0 &
			(glProgramUniform4uiv = GLContext.getFunctionAddress("glProgramUniform4uiv")) != 0 &
			(glProgramUniformMatrix2fv = GLContext.getFunctionAddress("glProgramUniformMatrix2fv")) != 0 &
			(glProgramUniformMatrix3fv = GLContext.getFunctionAddress("glProgramUniformMatrix3fv")) != 0 &
			(glProgramUniformMatrix4fv = GLContext.getFunctionAddress("glProgramUniformMatrix4fv")) != 0 &
			(glProgramUniformMatrix2dv = GLContext.getFunctionAddress("glProgramUniformMatrix2dv")) != 0 &
			(glProgramUniformMatrix3dv = GLContext.getFunctionAddress("glProgramUniformMatrix3dv")) != 0 &
			(glProgramUniformMatrix4dv = GLContext.getFunctionAddress("glProgramUniformMatrix4dv")) != 0 &
			(glProgramUniformMatrix2x3fv = GLContext.getFunctionAddress("glProgramUniformMatrix2x3fv")) != 0 &
			(glProgramUniformMatrix3x2fv = GLContext.getFunctionAddress("glProgramUniformMatrix3x2fv")) != 0 &
			(glProgramUniformMatrix2x4fv = GLContext.getFunctionAddress("glProgramUniformMatrix2x4fv")) != 0 &
			(glProgramUniformMatrix4x2fv = GLContext.getFunctionAddress("glProgramUniformMatrix4x2fv")) != 0 &
			(glProgramUniformMatrix3x4fv = GLContext.getFunctionAddress("glProgramUniformMatrix3x4fv")) != 0 &
			(glProgramUniformMatrix4x3fv = GLContext.getFunctionAddress("glProgramUniformMatrix4x3fv")) != 0 &
			(glProgramUniformMatrix2x3dv = GLContext.getFunctionAddress("glProgramUniformMatrix2x3dv")) != 0 &
			(glProgramUniformMatrix3x2dv = GLContext.getFunctionAddress("glProgramUniformMatrix3x2dv")) != 0 &
			(glProgramUniformMatrix2x4dv = GLContext.getFunctionAddress("glProgramUniformMatrix2x4dv")) != 0 &
			(glProgramUniformMatrix4x2dv = GLContext.getFunctionAddress("glProgramUniformMatrix4x2dv")) != 0 &
			(glProgramUniformMatrix3x4dv = GLContext.getFunctionAddress("glProgramUniformMatrix3x4dv")) != 0 &
			(glProgramUniformMatrix4x3dv = GLContext.getFunctionAddress("glProgramUniformMatrix4x3dv")) != 0 &
			(glValidateProgramPipeline = GLContext.getFunctionAddress("glValidateProgramPipeline")) != 0 &
			(glGetProgramPipelineInfoLog = GLContext.getFunctionAddress("glGetProgramPipelineInfoLog")) != 0 &
			(glVertexAttribL1d = GLContext.getFunctionAddress("glVertexAttribL1d")) != 0 &
			(glVertexAttribL2d = GLContext.getFunctionAddress("glVertexAttribL2d")) != 0 &
			(glVertexAttribL3d = GLContext.getFunctionAddress("glVertexAttribL3d")) != 0 &
			(glVertexAttribL4d = GLContext.getFunctionAddress("glVertexAttribL4d")) != 0 &
			(glVertexAttribL1dv = GLContext.getFunctionAddress("glVertexAttribL1dv")) != 0 &
			(glVertexAttribL2dv = GLContext.getFunctionAddress("glVertexAttribL2dv")) != 0 &
			(glVertexAttribL3dv = GLContext.getFunctionAddress("glVertexAttribL3dv")) != 0 &
			(glVertexAttribL4dv = GLContext.getFunctionAddress("glVertexAttribL4dv")) != 0 &
			(glVertexAttribLPointer = GLContext.getFunctionAddress("glVertexAttribLPointer")) != 0 &
			(glGetVertexAttribLdv = GLContext.getFunctionAddress("glGetVertexAttribLdv")) != 0 &
			(glViewportArrayv = GLContext.getFunctionAddress("glViewportArrayv")) != 0 &
			(glViewportIndexedf = GLContext.getFunctionAddress("glViewportIndexedf")) != 0 &
			(glViewportIndexedfv = GLContext.getFunctionAddress("glViewportIndexedfv")) != 0 &
			(glScissorArrayv = GLContext.getFunctionAddress("glScissorArrayv")) != 0 &
			(glScissorIndexed = GLContext.getFunctionAddress("glScissorIndexed")) != 0 &
			(glScissorIndexedv = GLContext.getFunctionAddress("glScissorIndexedv")) != 0 &
			(glDepthRangeArrayv = GLContext.getFunctionAddress("glDepthRangeArrayv")) != 0 &
			(glDepthRangeIndexed = GLContext.getFunctionAddress("glDepthRangeIndexed")) != 0 &
			(glGetFloati_v = GLContext.getFunctionAddress("glGetFloati_v")) != 0 &
			(glGetDoublei_v = GLContext.getFunctionAddress("glGetDoublei_v")) != 0;
	}

	private boolean GL42_initNativeFunctionAddresses() {
		return
			((glGetActiveAtomicCounterBufferiv = GLContext.getFunctionAddress("glGetActiveAtomicCounterBufferiv")) != 0 || true) &
			(glTexStorage1D = GLContext.getFunctionAddress("glTexStorage1D")) != 0 &
			(glTexStorage2D = GLContext.getFunctionAddress("glTexStorage2D")) != 0 &
			(glTexStorage3D = GLContext.getFunctionAddress("glTexStorage3D")) != 0 &
			(glDrawTransformFeedbackInstanced = GLContext.getFunctionAddress("glDrawTransformFeedbackInstanced")) != 0 &
			(glDrawTransformFeedbackStreamInstanced = GLContext.getFunctionAddress("glDrawTransformFeedbackStreamInstanced")) != 0 &
			(glDrawArraysInstancedBaseInstance = GLContext.getFunctionAddress("glDrawArraysInstancedBaseInstance")) != 0 &
			(glDrawElementsInstancedBaseInstance = GLContext.getFunctionAddress("glDrawElementsInstancedBaseInstance")) != 0 &
			(glDrawElementsInstancedBaseVertexBaseInstance = GLContext.getFunctionAddress("glDrawElementsInstancedBaseVertexBaseInstance")) != 0 &
			(glBindImageTexture = GLContext.getFunctionAddress("glBindImageTexture")) != 0 &
			(glMemoryBarrier = GLContext.getFunctionAddress("glMemoryBarrier")) != 0 &
			(glGetInternalformativ = GLContext.getFunctionAddress("glGetInternalformativ")) != 0;
	}

	private boolean GL43_initNativeFunctionAddresses() {
		return
			(glClearBufferData = GLContext.getFunctionAddress("glClearBufferData")) != 0 &
			(glClearBufferSubData = GLContext.getFunctionAddress("glClearBufferSubData")) != 0 &
			(glDispatchCompute = GLContext.getFunctionAddress("glDispatchCompute")) != 0 &
			(glDispatchComputeIndirect = GLContext.getFunctionAddress("glDispatchComputeIndirect")) != 0 &
			(glCopyImageSubData = GLContext.getFunctionAddress("glCopyImageSubData")) != 0 &
			(glDebugMessageControl = GLContext.getFunctionAddress("glDebugMessageControl")) != 0 &
			(glDebugMessageInsert = GLContext.getFunctionAddress("glDebugMessageInsert")) != 0 &
			(glDebugMessageCallback = GLContext.getFunctionAddress("glDebugMessageCallback")) != 0 &
			(glGetDebugMessageLog = GLContext.getFunctionAddress("glGetDebugMessageLog")) != 0 &
			(glPushDebugGroup = GLContext.getFunctionAddress("glPushDebugGroup")) != 0 &
			(glPopDebugGroup = GLContext.getFunctionAddress("glPopDebugGroup")) != 0 &
			(glObjectLabel = GLContext.getFunctionAddress("glObjectLabel")) != 0 &
			(glGetObjectLabel = GLContext.getFunctionAddress("glGetObjectLabel")) != 0 &
			(glObjectPtrLabel = GLContext.getFunctionAddress("glObjectPtrLabel")) != 0 &
			(glGetObjectPtrLabel = GLContext.getFunctionAddress("glGetObjectPtrLabel")) != 0 &
			(glFramebufferParameteri = GLContext.getFunctionAddress("glFramebufferParameteri")) != 0 &
			(glGetFramebufferParameteriv = GLContext.getFunctionAddress("glGetFramebufferParameteriv")) != 0 &
			(glGetInternalformati64v = GLContext.getFunctionAddress("glGetInternalformati64v")) != 0 &
			(glInvalidateTexSubImage = GLContext.getFunctionAddress("glInvalidateTexSubImage")) != 0 &
			(glInvalidateTexImage = GLContext.getFunctionAddress("glInvalidateTexImage")) != 0 &
			(glInvalidateBufferSubData = GLContext.getFunctionAddress("glInvalidateBufferSubData")) != 0 &
			(glInvalidateBufferData = GLContext.getFunctionAddress("glInvalidateBufferData")) != 0 &
			(glInvalidateFramebuffer = GLContext.getFunctionAddress("glInvalidateFramebuffer")) != 0 &
			(glInvalidateSubFramebuffer = GLContext.getFunctionAddress("glInvalidateSubFramebuffer")) != 0 &
			(glMultiDrawArraysIndirect = GLContext.getFunctionAddress("glMultiDrawArraysIndirect")) != 0 &
			(glMultiDrawElementsIndirect = GLContext.getFunctionAddress("glMultiDrawElementsIndirect")) != 0 &
			(glGetProgramInterfaceiv = GLContext.getFunctionAddress("glGetProgramInterfaceiv")) != 0 &
			(glGetProgramResourceIndex = GLContext.getFunctionAddress("glGetProgramResourceIndex")) != 0 &
			(glGetProgramResourceName = GLContext.getFunctionAddress("glGetProgramResourceName")) != 0 &
			(glGetProgramResourceiv = GLContext.getFunctionAddress("glGetProgramResourceiv")) != 0 &
			(glGetProgramResourceLocation = GLContext.getFunctionAddress("glGetProgramResourceLocation")) != 0 &
			(glGetProgramResourceLocationIndex = GLContext.getFunctionAddress("glGetProgramResourceLocationIndex")) != 0 &
			(glShaderStorageBlockBinding = GLContext.getFunctionAddress("glShaderStorageBlockBinding")) != 0 &
			(glTexBufferRange = GLContext.getFunctionAddress("glTexBufferRange")) != 0 &
			(glTexStorage2DMultisample = GLContext.getFunctionAddress("glTexStorage2DMultisample")) != 0 &
			(glTexStorage3DMultisample = GLContext.getFunctionAddress("glTexStorage3DMultisample")) != 0 &
			(glTextureView = GLContext.getFunctionAddress("glTextureView")) != 0 &
			(glBindVertexBuffer = GLContext.getFunctionAddress("glBindVertexBuffer")) != 0 &
			(glVertexAttribFormat = GLContext.getFunctionAddress("glVertexAttribFormat")) != 0 &
			(glVertexAttribIFormat = GLContext.getFunctionAddress("glVertexAttribIFormat")) != 0 &
			(glVertexAttribLFormat = GLContext.getFunctionAddress("glVertexAttribLFormat")) != 0 &
			(glVertexAttribBinding = GLContext.getFunctionAddress("glVertexAttribBinding")) != 0 &
			(glVertexBindingDivisor = GLContext.getFunctionAddress("glVertexBindingDivisor")) != 0;
	}

	private boolean GREMEDY_frame_terminator_initNativeFunctionAddresses() {
		return
			(glFrameTerminatorGREMEDY = GLContext.getFunctionAddress("glFrameTerminatorGREMEDY")) != 0;
	}

	private boolean GREMEDY_string_marker_initNativeFunctionAddresses() {
		return
			(glStringMarkerGREMEDY = GLContext.getFunctionAddress("glStringMarkerGREMEDY")) != 0;
	}

	private boolean INTEL_map_texture_initNativeFunctionAddresses() {
		return
			(glMapTexture2DINTEL = GLContext.getFunctionAddress("glMapTexture2DINTEL")) != 0 &
			(glUnmapTexture2DINTEL = GLContext.getFunctionAddress("glUnmapTexture2DINTEL")) != 0 &
			(glSyncTextureINTEL = GLContext.getFunctionAddress("glSyncTextureINTEL")) != 0;
	}

	private boolean KHR_debug_initNativeFunctionAddresses() {
		return
			(glDebugMessageControl = GLContext.getFunctionAddress("glDebugMessageControl")) != 0 &
			(glDebugMessageInsert = GLContext.getFunctionAddress("glDebugMessageInsert")) != 0 &
			(glDebugMessageCallback = GLContext.getFunctionAddress("glDebugMessageCallback")) != 0 &
			(glGetDebugMessageLog = GLContext.getFunctionAddress("glGetDebugMessageLog")) != 0 &
			(glPushDebugGroup = GLContext.getFunctionAddress("glPushDebugGroup")) != 0 &
			(glPopDebugGroup = GLContext.getFunctionAddress("glPopDebugGroup")) != 0 &
			(glObjectLabel = GLContext.getFunctionAddress("glObjectLabel")) != 0 &
			(glGetObjectLabel = GLContext.getFunctionAddress("glGetObjectLabel")) != 0 &
			(glObjectPtrLabel = GLContext.getFunctionAddress("glObjectPtrLabel")) != 0 &
			(glGetObjectPtrLabel = GLContext.getFunctionAddress("glGetObjectPtrLabel")) != 0;
	}

	private boolean NV_bindless_texture_initNativeFunctionAddresses() {
		return
			(glGetTextureHandleNV = GLContext.getFunctionAddress("glGetTextureHandleNV")) != 0 &
			(glGetTextureSamplerHandleNV = GLContext.getFunctionAddress("glGetTextureSamplerHandleNV")) != 0 &
			(glMakeTextureHandleResidentNV = GLContext.getFunctionAddress("glMakeTextureHandleResidentNV")) != 0 &
			(glMakeTextureHandleNonResidentNV = GLContext.getFunctionAddress("glMakeTextureHandleNonResidentNV")) != 0 &
			(glGetImageHandleNV = GLContext.getFunctionAddress("glGetImageHandleNV")) != 0 &
			(glMakeImageHandleResidentNV = GLContext.getFunctionAddress("glMakeImageHandleResidentNV")) != 0 &
			(glMakeImageHandleNonResidentNV = GLContext.getFunctionAddress("glMakeImageHandleNonResidentNV")) != 0 &
			(glUniformHandleui64NV = GLContext.getFunctionAddress("glUniformHandleui64NV")) != 0 &
			(glUniformHandleui64vNV = GLContext.getFunctionAddress("glUniformHandleui64vNV")) != 0 &
			(glProgramUniformHandleui64NV = GLContext.getFunctionAddress("glProgramUniformHandleui64NV")) != 0 &
			(glProgramUniformHandleui64vNV = GLContext.getFunctionAddress("glProgramUniformHandleui64vNV")) != 0 &
			(glIsTextureHandleResidentNV = GLContext.getFunctionAddress("glIsTextureHandleResidentNV")) != 0 &
			(glIsImageHandleResidentNV = GLContext.getFunctionAddress("glIsImageHandleResidentNV")) != 0;
	}

	private boolean NV_conditional_render_initNativeFunctionAddresses() {
		return
			(glBeginConditionalRenderNV = GLContext.getFunctionAddress("glBeginConditionalRenderNV")) != 0 &
			(glEndConditionalRenderNV = GLContext.getFunctionAddress("glEndConditionalRenderNV")) != 0;
	}

	private boolean NV_copy_image_initNativeFunctionAddresses() {
		return
			(glCopyImageSubDataNV = GLContext.getFunctionAddress("glCopyImageSubDataNV")) != 0;
	}

	private boolean NV_depth_buffer_float_initNativeFunctionAddresses() {
		return
			(glDepthRangedNV = GLContext.getFunctionAddress("glDepthRangedNV")) != 0 &
			(glClearDepthdNV = GLContext.getFunctionAddress("glClearDepthdNV")) != 0 &
			(glDepthBoundsdNV = GLContext.getFunctionAddress("glDepthBoundsdNV")) != 0;
	}

	private boolean NV_draw_texture_initNativeFunctionAddresses() {
		return
			(glDrawTextureNV = GLContext.getFunctionAddress("glDrawTextureNV")) != 0;
	}

	private boolean NV_evaluators_initNativeFunctionAddresses() {
		return
			(glGetMapControlPointsNV = GLContext.getFunctionAddress("glGetMapControlPointsNV")) != 0 &
			(glMapControlPointsNV = GLContext.getFunctionAddress("glMapControlPointsNV")) != 0 &
			(glMapParameterfvNV = GLContext.getFunctionAddress("glMapParameterfvNV")) != 0 &
			(glMapParameterivNV = GLContext.getFunctionAddress("glMapParameterivNV")) != 0 &
			(glGetMapParameterfvNV = GLContext.getFunctionAddress("glGetMapParameterfvNV")) != 0 &
			(glGetMapParameterivNV = GLContext.getFunctionAddress("glGetMapParameterivNV")) != 0 &
			(glGetMapAttribParameterfvNV = GLContext.getFunctionAddress("glGetMapAttribParameterfvNV")) != 0 &
			(glGetMapAttribParameterivNV = GLContext.getFunctionAddress("glGetMapAttribParameterivNV")) != 0 &
			(glEvalMapsNV = GLContext.getFunctionAddress("glEvalMapsNV")) != 0;
	}

	private boolean NV_explicit_multisample_initNativeFunctionAddresses() {
		return
			(glGetBooleanIndexedvEXT = GLContext.getFunctionAddress("glGetBooleanIndexedvEXT")) != 0 &
			(glGetIntegerIndexedvEXT = GLContext.getFunctionAddress("glGetIntegerIndexedvEXT")) != 0 &
			(glGetMultisamplefvNV = GLContext.getFunctionAddress("glGetMultisamplefvNV")) != 0 &
			(glSampleMaskIndexedNV = GLContext.getFunctionAddress("glSampleMaskIndexedNV")) != 0 &
			(glTexRenderbufferNV = GLContext.getFunctionAddress("glTexRenderbufferNV")) != 0;
	}

	private boolean NV_fence_initNativeFunctionAddresses() {
		return
			(glGenFencesNV = GLContext.getFunctionAddress("glGenFencesNV")) != 0 &
			(glDeleteFencesNV = GLContext.getFunctionAddress("glDeleteFencesNV")) != 0 &
			(glSetFenceNV = GLContext.getFunctionAddress("glSetFenceNV")) != 0 &
			(glTestFenceNV = GLContext.getFunctionAddress("glTestFenceNV")) != 0 &
			(glFinishFenceNV = GLContext.getFunctionAddress("glFinishFenceNV")) != 0 &
			(glIsFenceNV = GLContext.getFunctionAddress("glIsFenceNV")) != 0 &
			(glGetFenceivNV = GLContext.getFunctionAddress("glGetFenceivNV")) != 0;
	}

	private boolean NV_fragment_program_initNativeFunctionAddresses() {
		return
			(glProgramNamedParameter4fNV = GLContext.getFunctionAddress("glProgramNamedParameter4fNV")) != 0 &
			(glProgramNamedParameter4dNV = GLContext.getFunctionAddress("glProgramNamedParameter4dNV")) != 0 &
			(glGetProgramNamedParameterfvNV = GLContext.getFunctionAddress("glGetProgramNamedParameterfvNV")) != 0 &
			(glGetProgramNamedParameterdvNV = GLContext.getFunctionAddress("glGetProgramNamedParameterdvNV")) != 0;
	}

	private boolean NV_framebuffer_multisample_coverage_initNativeFunctionAddresses() {
		return
			(glRenderbufferStorageMultisampleCoverageNV = GLContext.getFunctionAddress("glRenderbufferStorageMultisampleCoverageNV")) != 0;
	}

	private boolean NV_geometry_program4_initNativeFunctionAddresses() {
		return
			(glProgramVertexLimitNV = GLContext.getFunctionAddress("glProgramVertexLimitNV")) != 0 &
			(glFramebufferTextureEXT = GLContext.getFunctionAddress("glFramebufferTextureEXT")) != 0 &
			(glFramebufferTextureLayerEXT = GLContext.getFunctionAddress("glFramebufferTextureLayerEXT")) != 0 &
			(glFramebufferTextureFaceEXT = GLContext.getFunctionAddress("glFramebufferTextureFaceEXT")) != 0;
	}

	private boolean NV_gpu_program4_initNativeFunctionAddresses() {
		return
			(glProgramLocalParameterI4iNV = GLContext.getFunctionAddress("glProgramLocalParameterI4iNV")) != 0 &
			(glProgramLocalParameterI4ivNV = GLContext.getFunctionAddress("glProgramLocalParameterI4ivNV")) != 0 &
			(glProgramLocalParametersI4ivNV = GLContext.getFunctionAddress("glProgramLocalParametersI4ivNV")) != 0 &
			(glProgramLocalParameterI4uiNV = GLContext.getFunctionAddress("glProgramLocalParameterI4uiNV")) != 0 &
			(glProgramLocalParameterI4uivNV = GLContext.getFunctionAddress("glProgramLocalParameterI4uivNV")) != 0 &
			(glProgramLocalParametersI4uivNV = GLContext.getFunctionAddress("glProgramLocalParametersI4uivNV")) != 0 &
			(glProgramEnvParameterI4iNV = GLContext.getFunctionAddress("glProgramEnvParameterI4iNV")) != 0 &
			(glProgramEnvParameterI4ivNV = GLContext.getFunctionAddress("glProgramEnvParameterI4ivNV")) != 0 &
			(glProgramEnvParametersI4ivNV = GLContext.getFunctionAddress("glProgramEnvParametersI4ivNV")) != 0 &
			(glProgramEnvParameterI4uiNV = GLContext.getFunctionAddress("glProgramEnvParameterI4uiNV")) != 0 &
			(glProgramEnvParameterI4uivNV = GLContext.getFunctionAddress("glProgramEnvParameterI4uivNV")) != 0 &
			(glProgramEnvParametersI4uivNV = GLContext.getFunctionAddress("glProgramEnvParametersI4uivNV")) != 0 &
			(glGetProgramLocalParameterIivNV = GLContext.getFunctionAddress("glGetProgramLocalParameterIivNV")) != 0 &
			(glGetProgramLocalParameterIuivNV = GLContext.getFunctionAddress("glGetProgramLocalParameterIuivNV")) != 0 &
			(glGetProgramEnvParameterIivNV = GLContext.getFunctionAddress("glGetProgramEnvParameterIivNV")) != 0 &
			(glGetProgramEnvParameterIuivNV = GLContext.getFunctionAddress("glGetProgramEnvParameterIuivNV")) != 0;
	}

	private boolean NV_gpu_shader5_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glUniform1i64NV = GLContext.getFunctionAddress("glUniform1i64NV")) != 0 &
			(glUniform2i64NV = GLContext.getFunctionAddress("glUniform2i64NV")) != 0 &
			(glUniform3i64NV = GLContext.getFunctionAddress("glUniform3i64NV")) != 0 &
			(glUniform4i64NV = GLContext.getFunctionAddress("glUniform4i64NV")) != 0 &
			(glUniform1i64vNV = GLContext.getFunctionAddress("glUniform1i64vNV")) != 0 &
			(glUniform2i64vNV = GLContext.getFunctionAddress("glUniform2i64vNV")) != 0 &
			(glUniform3i64vNV = GLContext.getFunctionAddress("glUniform3i64vNV")) != 0 &
			(glUniform4i64vNV = GLContext.getFunctionAddress("glUniform4i64vNV")) != 0 &
			(glUniform1ui64NV = GLContext.getFunctionAddress("glUniform1ui64NV")) != 0 &
			(glUniform2ui64NV = GLContext.getFunctionAddress("glUniform2ui64NV")) != 0 &
			(glUniform3ui64NV = GLContext.getFunctionAddress("glUniform3ui64NV")) != 0 &
			(glUniform4ui64NV = GLContext.getFunctionAddress("glUniform4ui64NV")) != 0 &
			(glUniform1ui64vNV = GLContext.getFunctionAddress("glUniform1ui64vNV")) != 0 &
			(glUniform2ui64vNV = GLContext.getFunctionAddress("glUniform2ui64vNV")) != 0 &
			(glUniform3ui64vNV = GLContext.getFunctionAddress("glUniform3ui64vNV")) != 0 &
			(glUniform4ui64vNV = GLContext.getFunctionAddress("glUniform4ui64vNV")) != 0 &
			(glGetUniformi64vNV = GLContext.getFunctionAddress("glGetUniformi64vNV")) != 0 &
			(glGetUniformui64vNV = GLContext.getFunctionAddress("glGetUniformui64vNV")) != 0 &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform1i64NV = GLContext.getFunctionAddress("glProgramUniform1i64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform2i64NV = GLContext.getFunctionAddress("glProgramUniform2i64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform3i64NV = GLContext.getFunctionAddress("glProgramUniform3i64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform4i64NV = GLContext.getFunctionAddress("glProgramUniform4i64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform1i64vNV = GLContext.getFunctionAddress("glProgramUniform1i64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform2i64vNV = GLContext.getFunctionAddress("glProgramUniform2i64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform3i64vNV = GLContext.getFunctionAddress("glProgramUniform3i64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform4i64vNV = GLContext.getFunctionAddress("glProgramUniform4i64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform1ui64NV = GLContext.getFunctionAddress("glProgramUniform1ui64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform2ui64NV = GLContext.getFunctionAddress("glProgramUniform2ui64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform3ui64NV = GLContext.getFunctionAddress("glProgramUniform3ui64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform4ui64NV = GLContext.getFunctionAddress("glProgramUniform4ui64NV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform1ui64vNV = GLContext.getFunctionAddress("glProgramUniform1ui64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform2ui64vNV = GLContext.getFunctionAddress("glProgramUniform2ui64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform3ui64vNV = GLContext.getFunctionAddress("glProgramUniform3ui64vNV")) != 0) &
			(!supported_extensions.contains("GL_EXT_direct_state_access") || (glProgramUniform4ui64vNV = GLContext.getFunctionAddress("glProgramUniform4ui64vNV")) != 0);
	}

	private boolean NV_half_float_initNativeFunctionAddresses() {
		return
			(glVertex2hNV = GLContext.getFunctionAddress("glVertex2hNV")) != 0 &
			(glVertex3hNV = GLContext.getFunctionAddress("glVertex3hNV")) != 0 &
			(glVertex4hNV = GLContext.getFunctionAddress("glVertex4hNV")) != 0 &
			(glNormal3hNV = GLContext.getFunctionAddress("glNormal3hNV")) != 0 &
			(glColor3hNV = GLContext.getFunctionAddress("glColor3hNV")) != 0 &
			(glColor4hNV = GLContext.getFunctionAddress("glColor4hNV")) != 0 &
			(glTexCoord1hNV = GLContext.getFunctionAddress("glTexCoord1hNV")) != 0 &
			(glTexCoord2hNV = GLContext.getFunctionAddress("glTexCoord2hNV")) != 0 &
			(glTexCoord3hNV = GLContext.getFunctionAddress("glTexCoord3hNV")) != 0 &
			(glTexCoord4hNV = GLContext.getFunctionAddress("glTexCoord4hNV")) != 0 &
			(glMultiTexCoord1hNV = GLContext.getFunctionAddress("glMultiTexCoord1hNV")) != 0 &
			(glMultiTexCoord2hNV = GLContext.getFunctionAddress("glMultiTexCoord2hNV")) != 0 &
			(glMultiTexCoord3hNV = GLContext.getFunctionAddress("glMultiTexCoord3hNV")) != 0 &
			(glMultiTexCoord4hNV = GLContext.getFunctionAddress("glMultiTexCoord4hNV")) != 0 &
			(glFogCoordhNV = GLContext.getFunctionAddress("glFogCoordhNV")) != 0 &
			(glSecondaryColor3hNV = GLContext.getFunctionAddress("glSecondaryColor3hNV")) != 0 &
			((glVertexWeighthNV = GLContext.getFunctionAddress("glVertexWeighthNV")) != 0 || true) &
			((glVertexAttrib1hNV = GLContext.getFunctionAddress("glVertexAttrib1hNV")) != 0 || true) &
			((glVertexAttrib2hNV = GLContext.getFunctionAddress("glVertexAttrib2hNV")) != 0 || true) &
			((glVertexAttrib3hNV = GLContext.getFunctionAddress("glVertexAttrib3hNV")) != 0 || true) &
			((glVertexAttrib4hNV = GLContext.getFunctionAddress("glVertexAttrib4hNV")) != 0 || true) &
			((glVertexAttribs1hvNV = GLContext.getFunctionAddress("glVertexAttribs1hvNV")) != 0 || true) &
			((glVertexAttribs2hvNV = GLContext.getFunctionAddress("glVertexAttribs2hvNV")) != 0 || true) &
			((glVertexAttribs3hvNV = GLContext.getFunctionAddress("glVertexAttribs3hvNV")) != 0 || true) &
			((glVertexAttribs4hvNV = GLContext.getFunctionAddress("glVertexAttribs4hvNV")) != 0 || true);
	}

	private boolean NV_occlusion_query_initNativeFunctionAddresses() {
		return
			(glGenOcclusionQueriesNV = GLContext.getFunctionAddress("glGenOcclusionQueriesNV")) != 0 &
			(glDeleteOcclusionQueriesNV = GLContext.getFunctionAddress("glDeleteOcclusionQueriesNV")) != 0 &
			(glIsOcclusionQueryNV = GLContext.getFunctionAddress("glIsOcclusionQueryNV")) != 0 &
			(glBeginOcclusionQueryNV = GLContext.getFunctionAddress("glBeginOcclusionQueryNV")) != 0 &
			(glEndOcclusionQueryNV = GLContext.getFunctionAddress("glEndOcclusionQueryNV")) != 0 &
			(glGetOcclusionQueryuivNV = GLContext.getFunctionAddress("glGetOcclusionQueryuivNV")) != 0 &
			(glGetOcclusionQueryivNV = GLContext.getFunctionAddress("glGetOcclusionQueryivNV")) != 0;
	}

	private boolean NV_parameter_buffer_object_initNativeFunctionAddresses() {
		return
			(glProgramBufferParametersfvNV = GLContext.getFunctionAddress("glProgramBufferParametersfvNV")) != 0 &
			(glProgramBufferParametersIivNV = GLContext.getFunctionAddress("glProgramBufferParametersIivNV")) != 0 &
			(glProgramBufferParametersIuivNV = GLContext.getFunctionAddress("glProgramBufferParametersIuivNV")) != 0;
	}

	private boolean NV_path_rendering_initNativeFunctionAddresses() {
		return
			(glPathCommandsNV = GLContext.getFunctionAddress("glPathCommandsNV")) != 0 &
			(glPathCoordsNV = GLContext.getFunctionAddress("glPathCoordsNV")) != 0 &
			(glPathSubCommandsNV = GLContext.getFunctionAddress("glPathSubCommandsNV")) != 0 &
			(glPathSubCoordsNV = GLContext.getFunctionAddress("glPathSubCoordsNV")) != 0 &
			(glPathStringNV = GLContext.getFunctionAddress("glPathStringNV")) != 0 &
			(glPathGlyphsNV = GLContext.getFunctionAddress("glPathGlyphsNV")) != 0 &
			(glPathGlyphRangeNV = GLContext.getFunctionAddress("glPathGlyphRangeNV")) != 0 &
			(glWeightPathsNV = GLContext.getFunctionAddress("glWeightPathsNV")) != 0 &
			(glCopyPathNV = GLContext.getFunctionAddress("glCopyPathNV")) != 0 &
			(glInterpolatePathsNV = GLContext.getFunctionAddress("glInterpolatePathsNV")) != 0 &
			(glTransformPathNV = GLContext.getFunctionAddress("glTransformPathNV")) != 0 &
			(glPathParameterivNV = GLContext.getFunctionAddress("glPathParameterivNV")) != 0 &
			(glPathParameteriNV = GLContext.getFunctionAddress("glPathParameteriNV")) != 0 &
			(glPathParameterfvNV = GLContext.getFunctionAddress("glPathParameterfvNV")) != 0 &
			(glPathParameterfNV = GLContext.getFunctionAddress("glPathParameterfNV")) != 0 &
			(glPathDashArrayNV = GLContext.getFunctionAddress("glPathDashArrayNV")) != 0 &
			(glGenPathsNV = GLContext.getFunctionAddress("glGenPathsNV")) != 0 &
			(glDeletePathsNV = GLContext.getFunctionAddress("glDeletePathsNV")) != 0 &
			(glIsPathNV = GLContext.getFunctionAddress("glIsPathNV")) != 0 &
			(glPathStencilFuncNV = GLContext.getFunctionAddress("glPathStencilFuncNV")) != 0 &
			(glPathStencilDepthOffsetNV = GLContext.getFunctionAddress("glPathStencilDepthOffsetNV")) != 0 &
			(glStencilFillPathNV = GLContext.getFunctionAddress("glStencilFillPathNV")) != 0 &
			(glStencilStrokePathNV = GLContext.getFunctionAddress("glStencilStrokePathNV")) != 0 &
			(glStencilFillPathInstancedNV = GLContext.getFunctionAddress("glStencilFillPathInstancedNV")) != 0 &
			(glStencilStrokePathInstancedNV = GLContext.getFunctionAddress("glStencilStrokePathInstancedNV")) != 0 &
			(glPathCoverDepthFuncNV = GLContext.getFunctionAddress("glPathCoverDepthFuncNV")) != 0 &
			(glPathColorGenNV = GLContext.getFunctionAddress("glPathColorGenNV")) != 0 &
			(glPathTexGenNV = GLContext.getFunctionAddress("glPathTexGenNV")) != 0 &
			(glPathFogGenNV = GLContext.getFunctionAddress("glPathFogGenNV")) != 0 &
			(glCoverFillPathNV = GLContext.getFunctionAddress("glCoverFillPathNV")) != 0 &
			(glCoverStrokePathNV = GLContext.getFunctionAddress("glCoverStrokePathNV")) != 0 &
			(glCoverFillPathInstancedNV = GLContext.getFunctionAddress("glCoverFillPathInstancedNV")) != 0 &
			(glCoverStrokePathInstancedNV = GLContext.getFunctionAddress("glCoverStrokePathInstancedNV")) != 0 &
			(glGetPathParameterivNV = GLContext.getFunctionAddress("glGetPathParameterivNV")) != 0 &
			(glGetPathParameterfvNV = GLContext.getFunctionAddress("glGetPathParameterfvNV")) != 0 &
			(glGetPathCommandsNV = GLContext.getFunctionAddress("glGetPathCommandsNV")) != 0 &
			(glGetPathCoordsNV = GLContext.getFunctionAddress("glGetPathCoordsNV")) != 0 &
			(glGetPathDashArrayNV = GLContext.getFunctionAddress("glGetPathDashArrayNV")) != 0 &
			(glGetPathMetricsNV = GLContext.getFunctionAddress("glGetPathMetricsNV")) != 0 &
			(glGetPathMetricRangeNV = GLContext.getFunctionAddress("glGetPathMetricRangeNV")) != 0 &
			(glGetPathSpacingNV = GLContext.getFunctionAddress("glGetPathSpacingNV")) != 0 &
			(glGetPathColorGenivNV = GLContext.getFunctionAddress("glGetPathColorGenivNV")) != 0 &
			(glGetPathColorGenfvNV = GLContext.getFunctionAddress("glGetPathColorGenfvNV")) != 0 &
			(glGetPathTexGenivNV = GLContext.getFunctionAddress("glGetPathTexGenivNV")) != 0 &
			(glGetPathTexGenfvNV = GLContext.getFunctionAddress("glGetPathTexGenfvNV")) != 0 &
			(glIsPointInFillPathNV = GLContext.getFunctionAddress("glIsPointInFillPathNV")) != 0 &
			(glIsPointInStrokePathNV = GLContext.getFunctionAddress("glIsPointInStrokePathNV")) != 0 &
			(glGetPathLengthNV = GLContext.getFunctionAddress("glGetPathLengthNV")) != 0 &
			(glPointAlongPathNV = GLContext.getFunctionAddress("glPointAlongPathNV")) != 0;
	}

	private boolean NV_pixel_data_range_initNativeFunctionAddresses() {
		return
			(glPixelDataRangeNV = GLContext.getFunctionAddress("glPixelDataRangeNV")) != 0 &
			(glFlushPixelDataRangeNV = GLContext.getFunctionAddress("glFlushPixelDataRangeNV")) != 0;
	}

	private boolean NV_point_sprite_initNativeFunctionAddresses() {
		return
			(glPointParameteriNV = GLContext.getFunctionAddress("glPointParameteriNV")) != 0 &
			(glPointParameterivNV = GLContext.getFunctionAddress("glPointParameterivNV")) != 0;
	}

	private boolean NV_present_video_initNativeFunctionAddresses() {
		return
			(glPresentFrameKeyedNV = GLContext.getFunctionAddress("glPresentFrameKeyedNV")) != 0 &
			(glPresentFrameDualFillNV = GLContext.getFunctionAddress("glPresentFrameDualFillNV")) != 0 &
			(glGetVideoivNV = GLContext.getFunctionAddress("glGetVideoivNV")) != 0 &
			(glGetVideouivNV = GLContext.getFunctionAddress("glGetVideouivNV")) != 0 &
			(glGetVideoi64vNV = GLContext.getFunctionAddress("glGetVideoi64vNV")) != 0 &
			(glGetVideoui64vNV = GLContext.getFunctionAddress("glGetVideoui64vNV")) != 0;
	}

	private boolean NV_primitive_restart_initNativeFunctionAddresses() {
		return
			(glPrimitiveRestartNV = GLContext.getFunctionAddress("glPrimitiveRestartNV")) != 0 &
			(glPrimitiveRestartIndexNV = GLContext.getFunctionAddress("glPrimitiveRestartIndexNV")) != 0;
	}

	private boolean NV_program_initNativeFunctionAddresses() {
		return
			(glLoadProgramNV = GLContext.getFunctionAddress("glLoadProgramNV")) != 0 &
			(glBindProgramNV = GLContext.getFunctionAddress("glBindProgramNV")) != 0 &
			(glDeleteProgramsNV = GLContext.getFunctionAddress("glDeleteProgramsNV")) != 0 &
			(glGenProgramsNV = GLContext.getFunctionAddress("glGenProgramsNV")) != 0 &
			(glGetProgramivNV = GLContext.getFunctionAddress("glGetProgramivNV")) != 0 &
			(glGetProgramStringNV = GLContext.getFunctionAddress("glGetProgramStringNV")) != 0 &
			(glIsProgramNV = GLContext.getFunctionAddress("glIsProgramNV")) != 0 &
			(glAreProgramsResidentNV = GLContext.getFunctionAddress("glAreProgramsResidentNV")) != 0 &
			(glRequestResidentProgramsNV = GLContext.getFunctionAddress("glRequestResidentProgramsNV")) != 0;
	}

	private boolean NV_register_combiners_initNativeFunctionAddresses() {
		return
			(glCombinerParameterfNV = GLContext.getFunctionAddress("glCombinerParameterfNV")) != 0 &
			(glCombinerParameterfvNV = GLContext.getFunctionAddress("glCombinerParameterfvNV")) != 0 &
			(glCombinerParameteriNV = GLContext.getFunctionAddress("glCombinerParameteriNV")) != 0 &
			(glCombinerParameterivNV = GLContext.getFunctionAddress("glCombinerParameterivNV")) != 0 &
			(glCombinerInputNV = GLContext.getFunctionAddress("glCombinerInputNV")) != 0 &
			(glCombinerOutputNV = GLContext.getFunctionAddress("glCombinerOutputNV")) != 0 &
			(glFinalCombinerInputNV = GLContext.getFunctionAddress("glFinalCombinerInputNV")) != 0 &
			(glGetCombinerInputParameterfvNV = GLContext.getFunctionAddress("glGetCombinerInputParameterfvNV")) != 0 &
			(glGetCombinerInputParameterivNV = GLContext.getFunctionAddress("glGetCombinerInputParameterivNV")) != 0 &
			(glGetCombinerOutputParameterfvNV = GLContext.getFunctionAddress("glGetCombinerOutputParameterfvNV")) != 0 &
			(glGetCombinerOutputParameterivNV = GLContext.getFunctionAddress("glGetCombinerOutputParameterivNV")) != 0 &
			(glGetFinalCombinerInputParameterfvNV = GLContext.getFunctionAddress("glGetFinalCombinerInputParameterfvNV")) != 0 &
			(glGetFinalCombinerInputParameterivNV = GLContext.getFunctionAddress("glGetFinalCombinerInputParameterivNV")) != 0;
	}

	private boolean NV_register_combiners2_initNativeFunctionAddresses() {
		return
			(glCombinerStageParameterfvNV = GLContext.getFunctionAddress("glCombinerStageParameterfvNV")) != 0 &
			(glGetCombinerStageParameterfvNV = GLContext.getFunctionAddress("glGetCombinerStageParameterfvNV")) != 0;
	}

	private boolean NV_shader_buffer_load_initNativeFunctionAddresses() {
		return
			(glMakeBufferResidentNV = GLContext.getFunctionAddress("glMakeBufferResidentNV")) != 0 &
			(glMakeBufferNonResidentNV = GLContext.getFunctionAddress("glMakeBufferNonResidentNV")) != 0 &
			(glIsBufferResidentNV = GLContext.getFunctionAddress("glIsBufferResidentNV")) != 0 &
			(glMakeNamedBufferResidentNV = GLContext.getFunctionAddress("glMakeNamedBufferResidentNV")) != 0 &
			(glMakeNamedBufferNonResidentNV = GLContext.getFunctionAddress("glMakeNamedBufferNonResidentNV")) != 0 &
			(glIsNamedBufferResidentNV = GLContext.getFunctionAddress("glIsNamedBufferResidentNV")) != 0 &
			(glGetBufferParameterui64vNV = GLContext.getFunctionAddress("glGetBufferParameterui64vNV")) != 0 &
			(glGetNamedBufferParameterui64vNV = GLContext.getFunctionAddress("glGetNamedBufferParameterui64vNV")) != 0 &
			(glGetIntegerui64vNV = GLContext.getFunctionAddress("glGetIntegerui64vNV")) != 0 &
			(glUniformui64NV = GLContext.getFunctionAddress("glUniformui64NV")) != 0 &
			(glUniformui64vNV = GLContext.getFunctionAddress("glUniformui64vNV")) != 0 &
			(glGetUniformui64vNV = GLContext.getFunctionAddress("glGetUniformui64vNV")) != 0 &
			(glProgramUniformui64NV = GLContext.getFunctionAddress("glProgramUniformui64NV")) != 0 &
			(glProgramUniformui64vNV = GLContext.getFunctionAddress("glProgramUniformui64vNV")) != 0;
	}

	private boolean NV_texture_barrier_initNativeFunctionAddresses() {
		return
			(glTextureBarrierNV = GLContext.getFunctionAddress("glTextureBarrierNV")) != 0;
	}

	private boolean NV_texture_multisample_initNativeFunctionAddresses() {
		return
			(glTexImage2DMultisampleCoverageNV = GLContext.getFunctionAddress("glTexImage2DMultisampleCoverageNV")) != 0 &
			(glTexImage3DMultisampleCoverageNV = GLContext.getFunctionAddress("glTexImage3DMultisampleCoverageNV")) != 0 &
			(glTextureImage2DMultisampleNV = GLContext.getFunctionAddress("glTextureImage2DMultisampleNV")) != 0 &
			(glTextureImage3DMultisampleNV = GLContext.getFunctionAddress("glTextureImage3DMultisampleNV")) != 0 &
			(glTextureImage2DMultisampleCoverageNV = GLContext.getFunctionAddress("glTextureImage2DMultisampleCoverageNV")) != 0 &
			(glTextureImage3DMultisampleCoverageNV = GLContext.getFunctionAddress("glTextureImage3DMultisampleCoverageNV")) != 0;
	}

	private boolean NV_transform_feedback_initNativeFunctionAddresses() {
		return
			(glBindBufferRangeNV = GLContext.getFunctionAddress("glBindBufferRangeNV")) != 0 &
			(glBindBufferOffsetNV = GLContext.getFunctionAddress("glBindBufferOffsetNV")) != 0 &
			(glBindBufferBaseNV = GLContext.getFunctionAddress("glBindBufferBaseNV")) != 0 &
			(glTransformFeedbackAttribsNV = GLContext.getFunctionAddress("glTransformFeedbackAttribsNV")) != 0 &
			(glTransformFeedbackVaryingsNV = GLContext.getFunctionAddress("glTransformFeedbackVaryingsNV")) != 0 &
			(glBeginTransformFeedbackNV = GLContext.getFunctionAddress("glBeginTransformFeedbackNV")) != 0 &
			(glEndTransformFeedbackNV = GLContext.getFunctionAddress("glEndTransformFeedbackNV")) != 0 &
			(glGetVaryingLocationNV = GLContext.getFunctionAddress("glGetVaryingLocationNV")) != 0 &
			(glGetActiveVaryingNV = GLContext.getFunctionAddress("glGetActiveVaryingNV")) != 0 &
			(glActiveVaryingNV = GLContext.getFunctionAddress("glActiveVaryingNV")) != 0 &
			(glGetTransformFeedbackVaryingNV = GLContext.getFunctionAddress("glGetTransformFeedbackVaryingNV")) != 0;
	}

	private boolean NV_transform_feedback2_initNativeFunctionAddresses() {
		return
			(glBindTransformFeedbackNV = GLContext.getFunctionAddress("glBindTransformFeedbackNV")) != 0 &
			(glDeleteTransformFeedbacksNV = GLContext.getFunctionAddress("glDeleteTransformFeedbacksNV")) != 0 &
			(glGenTransformFeedbacksNV = GLContext.getFunctionAddress("glGenTransformFeedbacksNV")) != 0 &
			(glIsTransformFeedbackNV = GLContext.getFunctionAddress("glIsTransformFeedbackNV")) != 0 &
			(glPauseTransformFeedbackNV = GLContext.getFunctionAddress("glPauseTransformFeedbackNV")) != 0 &
			(glResumeTransformFeedbackNV = GLContext.getFunctionAddress("glResumeTransformFeedbackNV")) != 0 &
			(glDrawTransformFeedbackNV = GLContext.getFunctionAddress("glDrawTransformFeedbackNV")) != 0;
	}

	private boolean NV_vertex_array_range_initNativeFunctionAddresses() {
		return
			(glVertexArrayRangeNV = GLContext.getFunctionAddress("glVertexArrayRangeNV")) != 0 &
			(glFlushVertexArrayRangeNV = GLContext.getFunctionAddress("glFlushVertexArrayRangeNV")) != 0 &
			(glAllocateMemoryNV = GLContext.getPlatformSpecificFunctionAddress("gl", new String[]{"Windows", "Linux"}, new String[]{"wgl", "glX"}, "glAllocateMemoryNV")) != 0 &
			(glFreeMemoryNV = GLContext.getPlatformSpecificFunctionAddress("gl", new String[]{"Windows", "Linux"}, new String[]{"wgl", "glX"}, "glFreeMemoryNV")) != 0;
	}

	private boolean NV_vertex_attrib_integer_64bit_initNativeFunctionAddresses(Set<String> supported_extensions) {
		return
			(glVertexAttribL1i64NV = GLContext.getFunctionAddress("glVertexAttribL1i64NV")) != 0 &
			(glVertexAttribL2i64NV = GLContext.getFunctionAddress("glVertexAttribL2i64NV")) != 0 &
			(glVertexAttribL3i64NV = GLContext.getFunctionAddress("glVertexAttribL3i64NV")) != 0 &
			(glVertexAttribL4i64NV = GLContext.getFunctionAddress("glVertexAttribL4i64NV")) != 0 &
			(glVertexAttribL1i64vNV = GLContext.getFunctionAddress("glVertexAttribL1i64vNV")) != 0 &
			(glVertexAttribL2i64vNV = GLContext.getFunctionAddress("glVertexAttribL2i64vNV")) != 0 &
			(glVertexAttribL3i64vNV = GLContext.getFunctionAddress("glVertexAttribL3i64vNV")) != 0 &
			(glVertexAttribL4i64vNV = GLContext.getFunctionAddress("glVertexAttribL4i64vNV")) != 0 &
			(glVertexAttribL1ui64NV = GLContext.getFunctionAddress("glVertexAttribL1ui64NV")) != 0 &
			(glVertexAttribL2ui64NV = GLContext.getFunctionAddress("glVertexAttribL2ui64NV")) != 0 &
			(glVertexAttribL3ui64NV = GLContext.getFunctionAddress("glVertexAttribL3ui64NV")) != 0 &
			(glVertexAttribL4ui64NV = GLContext.getFunctionAddress("glVertexAttribL4ui64NV")) != 0 &
			(glVertexAttribL1ui64vNV = GLContext.getFunctionAddress("glVertexAttribL1ui64vNV")) != 0 &
			(glVertexAttribL2ui64vNV = GLContext.getFunctionAddress("glVertexAttribL2ui64vNV")) != 0 &
			(glVertexAttribL3ui64vNV = GLContext.getFunctionAddress("glVertexAttribL3ui64vNV")) != 0 &
			(glVertexAttribL4ui64vNV = GLContext.getFunctionAddress("glVertexAttribL4ui64vNV")) != 0 &
			(glGetVertexAttribLi64vNV = GLContext.getFunctionAddress("glGetVertexAttribLi64vNV")) != 0 &
			(glGetVertexAttribLui64vNV = GLContext.getFunctionAddress("glGetVertexAttribLui64vNV")) != 0 &
			(!supported_extensions.contains("GL_NV_vertex_buffer_unified_memory") || (glVertexAttribLFormatNV = GLContext.getFunctionAddress("glVertexAttribLFormatNV")) != 0);
	}

	private boolean NV_vertex_buffer_unified_memory_initNativeFunctionAddresses() {
		return
			(glBufferAddressRangeNV = GLContext.getFunctionAddress("glBufferAddressRangeNV")) != 0 &
			(glVertexFormatNV = GLContext.getFunctionAddress("glVertexFormatNV")) != 0 &
			(glNormalFormatNV = GLContext.getFunctionAddress("glNormalFormatNV")) != 0 &
			(glColorFormatNV = GLContext.getFunctionAddress("glColorFormatNV")) != 0 &
			(glIndexFormatNV = GLContext.getFunctionAddress("glIndexFormatNV")) != 0 &
			(glTexCoordFormatNV = GLContext.getFunctionAddress("glTexCoordFormatNV")) != 0 &
			(glEdgeFlagFormatNV = GLContext.getFunctionAddress("glEdgeFlagFormatNV")) != 0 &
			(glSecondaryColorFormatNV = GLContext.getFunctionAddress("glSecondaryColorFormatNV")) != 0 &
			(glFogCoordFormatNV = GLContext.getFunctionAddress("glFogCoordFormatNV")) != 0 &
			(glVertexAttribFormatNV = GLContext.getFunctionAddress("glVertexAttribFormatNV")) != 0 &
			(glVertexAttribIFormatNV = GLContext.getFunctionAddress("glVertexAttribIFormatNV")) != 0 &
			(glGetIntegerui64i_vNV = GLContext.getFunctionAddress("glGetIntegerui64i_vNV")) != 0;
	}

	private boolean NV_vertex_program_initNativeFunctionAddresses() {
		return
			(glExecuteProgramNV = GLContext.getFunctionAddress("glExecuteProgramNV")) != 0 &
			(glGetProgramParameterfvNV = GLContext.getFunctionAddress("glGetProgramParameterfvNV")) != 0 &
			(glGetProgramParameterdvNV = GLContext.getFunctionAddress("glGetProgramParameterdvNV")) != 0 &
			(glGetTrackMatrixivNV = GLContext.getFunctionAddress("glGetTrackMatrixivNV")) != 0 &
			(glGetVertexAttribfvNV = GLContext.getFunctionAddress("glGetVertexAttribfvNV")) != 0 &
			(glGetVertexAttribdvNV = GLContext.getFunctionAddress("glGetVertexAttribdvNV")) != 0 &
			(glGetVertexAttribivNV = GLContext.getFunctionAddress("glGetVertexAttribivNV")) != 0 &
			(glGetVertexAttribPointervNV = GLContext.getFunctionAddress("glGetVertexAttribPointervNV")) != 0 &
			(glProgramParameter4fNV = GLContext.getFunctionAddress("glProgramParameter4fNV")) != 0 &
			(glProgramParameter4dNV = GLContext.getFunctionAddress("glProgramParameter4dNV")) != 0 &
			(glProgramParameters4fvNV = GLContext.getFunctionAddress("glProgramParameters4fvNV")) != 0 &
			(glProgramParameters4dvNV = GLContext.getFunctionAddress("glProgramParameters4dvNV")) != 0 &
			(glTrackMatrixNV = GLContext.getFunctionAddress("glTrackMatrixNV")) != 0 &
			(glVertexAttribPointerNV = GLContext.getFunctionAddress("glVertexAttribPointerNV")) != 0 &
			(glVertexAttrib1sNV = GLContext.getFunctionAddress("glVertexAttrib1sNV")) != 0 &
			(glVertexAttrib1fNV = GLContext.getFunctionAddress("glVertexAttrib1fNV")) != 0 &
			(glVertexAttrib1dNV = GLContext.getFunctionAddress("glVertexAttrib1dNV")) != 0 &
			(glVertexAttrib2sNV = GLContext.getFunctionAddress("glVertexAttrib2sNV")) != 0 &
			(glVertexAttrib2fNV = GLContext.getFunctionAddress("glVertexAttrib2fNV")) != 0 &
			(glVertexAttrib2dNV = GLContext.getFunctionAddress("glVertexAttrib2dNV")) != 0 &
			(glVertexAttrib3sNV = GLContext.getFunctionAddress("glVertexAttrib3sNV")) != 0 &
			(glVertexAttrib3fNV = GLContext.getFunctionAddress("glVertexAttrib3fNV")) != 0 &
			(glVertexAttrib3dNV = GLContext.getFunctionAddress("glVertexAttrib3dNV")) != 0 &
			(glVertexAttrib4sNV = GLContext.getFunctionAddress("glVertexAttrib4sNV")) != 0 &
			(glVertexAttrib4fNV = GLContext.getFunctionAddress("glVertexAttrib4fNV")) != 0 &
			(glVertexAttrib4dNV = GLContext.getFunctionAddress("glVertexAttrib4dNV")) != 0 &
			(glVertexAttrib4ubNV = GLContext.getFunctionAddress("glVertexAttrib4ubNV")) != 0 &
			(glVertexAttribs1svNV = GLContext.getFunctionAddress("glVertexAttribs1svNV")) != 0 &
			(glVertexAttribs1fvNV = GLContext.getFunctionAddress("glVertexAttribs1fvNV")) != 0 &
			(glVertexAttribs1dvNV = GLContext.getFunctionAddress("glVertexAttribs1dvNV")) != 0 &
			(glVertexAttribs2svNV = GLContext.getFunctionAddress("glVertexAttribs2svNV")) != 0 &
			(glVertexAttribs2fvNV = GLContext.getFunctionAddress("glVertexAttribs2fvNV")) != 0 &
			(glVertexAttribs2dvNV = GLContext.getFunctionAddress("glVertexAttribs2dvNV")) != 0 &
			(glVertexAttribs3svNV = GLContext.getFunctionAddress("glVertexAttribs3svNV")) != 0 &
			(glVertexAttribs3fvNV = GLContext.getFunctionAddress("glVertexAttribs3fvNV")) != 0 &
			(glVertexAttribs3dvNV = GLContext.getFunctionAddress("glVertexAttribs3dvNV")) != 0 &
			(glVertexAttribs4svNV = GLContext.getFunctionAddress("glVertexAttribs4svNV")) != 0 &
			(glVertexAttribs4fvNV = GLContext.getFunctionAddress("glVertexAttribs4fvNV")) != 0 &
			(glVertexAttribs4dvNV = GLContext.getFunctionAddress("glVertexAttribs4dvNV")) != 0;
	}

	private boolean NV_video_capture_initNativeFunctionAddresses() {
		return
			(glBeginVideoCaptureNV = GLContext.getFunctionAddress("glBeginVideoCaptureNV")) != 0 &
			(glBindVideoCaptureStreamBufferNV = GLContext.getFunctionAddress("glBindVideoCaptureStreamBufferNV")) != 0 &
			(glBindVideoCaptureStreamTextureNV = GLContext.getFunctionAddress("glBindVideoCaptureStreamTextureNV")) != 0 &
			(glEndVideoCaptureNV = GLContext.getFunctionAddress("glEndVideoCaptureNV")) != 0 &
			(glGetVideoCaptureivNV = GLContext.getFunctionAddress("glGetVideoCaptureivNV")) != 0 &
			(glGetVideoCaptureStreamivNV = GLContext.getFunctionAddress("glGetVideoCaptureStreamivNV")) != 0 &
			(glGetVideoCaptureStreamfvNV = GLContext.getFunctionAddress("glGetVideoCaptureStreamfvNV")) != 0 &
			(glGetVideoCaptureStreamdvNV = GLContext.getFunctionAddress("glGetVideoCaptureStreamdvNV")) != 0 &
			(glVideoCaptureNV = GLContext.getFunctionAddress("glVideoCaptureNV")) != 0 &
			(glVideoCaptureStreamParameterivNV = GLContext.getFunctionAddress("glVideoCaptureStreamParameterivNV")) != 0 &
			(glVideoCaptureStreamParameterfvNV = GLContext.getFunctionAddress("glVideoCaptureStreamParameterfvNV")) != 0 &
			(glVideoCaptureStreamParameterdvNV = GLContext.getFunctionAddress("glVideoCaptureStreamParameterdvNV")) != 0;
	}

	private static void remove(Set supported_extensions, String extension) {
		LWJGLUtil.log(extension + " was reported as available but an entry point is missing");
		supported_extensions.remove(extension);
	}

	private Set<String> initAllStubs(boolean forwardCompatible) throws LWJGLException {
		glGetError = GLContext.getFunctionAddress("glGetError");
		glGetString = GLContext.getFunctionAddress("glGetString");
		glGetIntegerv = GLContext.getFunctionAddress("glGetIntegerv");
		glGetStringi = GLContext.getFunctionAddress("glGetStringi");
		GLContext.setCapabilities(this);
		Set<String> supported_extensions = new HashSet<String>(256);
		int profileMask = GLContext.getSupportedExtensions(supported_extensions);
		if ( supported_extensions.contains("OpenGL31") && !(supported_extensions.contains("GL_ARB_compatibility") || (profileMask & GL32.GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) != 0) )
			forwardCompatible = true;
		if (!GL11_initNativeFunctionAddresses(forwardCompatible))
			throw new LWJGLException("GL11 not supported");
		if (supported_extensions.contains("GL_ARB_fragment_program"))
			supported_extensions.add("GL_ARB_program");
		if (supported_extensions.contains("GL_ARB_pixel_buffer_object"))
			supported_extensions.add("GL_ARB_buffer_object");
		if (supported_extensions.contains("GL_ARB_vertex_buffer_object"))
			supported_extensions.add("GL_ARB_buffer_object");
		if (supported_extensions.contains("GL_ARB_vertex_program"))
			supported_extensions.add("GL_ARB_program");
		if (supported_extensions.contains("GL_EXT_pixel_buffer_object"))
			supported_extensions.add("GL_ARB_buffer_object");
		if (supported_extensions.contains("GL_NV_fragment_program"))
			supported_extensions.add("GL_NV_program");
		if (supported_extensions.contains("GL_NV_vertex_program"))
			supported_extensions.add("GL_NV_program");
		if ((supported_extensions.contains("GL_AMD_debug_output") || supported_extensions.contains("GL_AMDX_debug_output")) && !AMD_debug_output_initNativeFunctionAddresses()) {
			remove(supported_extensions, "GL_AMDX_debug_output");
			remove(supported_extensions, "GL_AMD_debug_output");
		}
		if (supported_extensions.contains("GL_AMD_draw_buffers_blend") && !AMD_draw_buffers_blend_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_draw_buffers_blend");
		if (supported_extensions.contains("GL_AMD_multi_draw_indirect") && !AMD_multi_draw_indirect_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_multi_draw_indirect");
		if (supported_extensions.contains("GL_AMD_name_gen_delete") && !AMD_name_gen_delete_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_name_gen_delete");
		if (supported_extensions.contains("GL_AMD_performance_monitor") && !AMD_performance_monitor_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_performance_monitor");
		if (supported_extensions.contains("GL_AMD_sample_positions") && !AMD_sample_positions_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_sample_positions");
		if (supported_extensions.contains("GL_AMD_sparse_texture") && !AMD_sparse_texture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_sparse_texture");
		if (supported_extensions.contains("GL_AMD_stencil_operation_extended") && !AMD_stencil_operation_extended_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_stencil_operation_extended");
		if (supported_extensions.contains("GL_AMD_vertex_shader_tessellator") && !AMD_vertex_shader_tessellator_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_AMD_vertex_shader_tessellator");
		if (supported_extensions.contains("GL_APPLE_element_array") && !APPLE_element_array_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_element_array");
		if (supported_extensions.contains("GL_APPLE_fence") && !APPLE_fence_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_fence");
		if (supported_extensions.contains("GL_APPLE_flush_buffer_range") && !APPLE_flush_buffer_range_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_flush_buffer_range");
		if (supported_extensions.contains("GL_APPLE_object_purgeable") && !APPLE_object_purgeable_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_object_purgeable");
		if (supported_extensions.contains("GL_APPLE_texture_range") && !APPLE_texture_range_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_texture_range");
		if (supported_extensions.contains("GL_APPLE_vertex_array_object") && !APPLE_vertex_array_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_vertex_array_object");
		if (supported_extensions.contains("GL_APPLE_vertex_array_range") && !APPLE_vertex_array_range_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_vertex_array_range");
		if (supported_extensions.contains("GL_APPLE_vertex_program_evaluators") && !APPLE_vertex_program_evaluators_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_APPLE_vertex_program_evaluators");
		if (supported_extensions.contains("GL_ARB_ES2_compatibility") && !ARB_ES2_compatibility_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_ES2_compatibility");
		if (supported_extensions.contains("GL_ARB_base_instance") && !ARB_base_instance_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_base_instance");
		if (supported_extensions.contains("GL_ARB_blend_func_extended") && !ARB_blend_func_extended_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_blend_func_extended");
		if (supported_extensions.contains("GL_ARB_buffer_object") && !ARB_buffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_buffer_object");
		if (supported_extensions.contains("GL_ARB_cl_event") && !ARB_cl_event_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_cl_event");
		if (supported_extensions.contains("GL_ARB_clear_buffer_object") && !ARB_clear_buffer_object_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_ARB_clear_buffer_object");
		if (supported_extensions.contains("GL_ARB_color_buffer_float") && !ARB_color_buffer_float_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_color_buffer_float");
		if (supported_extensions.contains("GL_ARB_compute_shader") && !ARB_compute_shader_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_compute_shader");
		if (supported_extensions.contains("GL_ARB_copy_buffer") && !ARB_copy_buffer_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_copy_buffer");
		if (supported_extensions.contains("GL_ARB_copy_image") && !ARB_copy_image_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_copy_image");
		if (supported_extensions.contains("GL_ARB_debug_output") && !ARB_debug_output_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_debug_output");
		if (supported_extensions.contains("GL_ARB_draw_buffers") && !ARB_draw_buffers_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_draw_buffers");
		if (supported_extensions.contains("GL_ARB_draw_buffers_blend") && !ARB_draw_buffers_blend_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_draw_buffers_blend");
		if (supported_extensions.contains("GL_ARB_draw_elements_base_vertex") && !ARB_draw_elements_base_vertex_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_draw_elements_base_vertex");
		if (supported_extensions.contains("GL_ARB_draw_indirect") && !ARB_draw_indirect_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_draw_indirect");
		if (supported_extensions.contains("GL_ARB_draw_instanced") && !ARB_draw_instanced_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_draw_instanced");
		if (supported_extensions.contains("GL_ARB_framebuffer_no_attachments") && !ARB_framebuffer_no_attachments_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_ARB_framebuffer_no_attachments");
		if (supported_extensions.contains("GL_ARB_framebuffer_object") && !ARB_framebuffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_framebuffer_object");
		if (supported_extensions.contains("GL_ARB_geometry_shader4") && !ARB_geometry_shader4_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_geometry_shader4");
		if (supported_extensions.contains("GL_ARB_get_program_binary") && !ARB_get_program_binary_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_get_program_binary");
		if (supported_extensions.contains("GL_ARB_gpu_shader_fp64") && !ARB_gpu_shader_fp64_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_ARB_gpu_shader_fp64");
		if (supported_extensions.contains("GL_ARB_imaging") && !ARB_imaging_initNativeFunctionAddresses(forwardCompatible))
			remove(supported_extensions, "GL_ARB_imaging");
		if (supported_extensions.contains("GL_ARB_instanced_arrays") && !ARB_instanced_arrays_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_instanced_arrays");
		if (supported_extensions.contains("GL_ARB_internalformat_query") && !ARB_internalformat_query_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_internalformat_query");
		if (supported_extensions.contains("GL_ARB_internalformat_query2") && !ARB_internalformat_query2_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_internalformat_query2");
		if (supported_extensions.contains("GL_ARB_invalidate_subdata") && !ARB_invalidate_subdata_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_invalidate_subdata");
		if (supported_extensions.contains("GL_ARB_map_buffer_range") && !ARB_map_buffer_range_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_map_buffer_range");
		if (supported_extensions.contains("GL_ARB_matrix_palette") && !ARB_matrix_palette_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_matrix_palette");
		if (supported_extensions.contains("GL_ARB_multi_draw_indirect") && !ARB_multi_draw_indirect_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_multi_draw_indirect");
		if (supported_extensions.contains("GL_ARB_multisample") && !ARB_multisample_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_multisample");
		if (supported_extensions.contains("GL_ARB_multitexture") && !ARB_multitexture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_multitexture");
		if (supported_extensions.contains("GL_ARB_occlusion_query") && !ARB_occlusion_query_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_occlusion_query");
		if (supported_extensions.contains("GL_ARB_point_parameters") && !ARB_point_parameters_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_point_parameters");
		if (supported_extensions.contains("GL_ARB_program") && !ARB_program_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_program");
		if (supported_extensions.contains("GL_ARB_program_interface_query") && !ARB_program_interface_query_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_program_interface_query");
		if (supported_extensions.contains("GL_ARB_provoking_vertex") && !ARB_provoking_vertex_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_provoking_vertex");
		if (supported_extensions.contains("GL_ARB_robustness") && !ARB_robustness_initNativeFunctionAddresses(forwardCompatible,supported_extensions))
			remove(supported_extensions, "GL_ARB_robustness");
		if (supported_extensions.contains("GL_ARB_sample_shading") && !ARB_sample_shading_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_sample_shading");
		if (supported_extensions.contains("GL_ARB_sampler_objects") && !ARB_sampler_objects_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_sampler_objects");
		if (supported_extensions.contains("GL_ARB_separate_shader_objects") && !ARB_separate_shader_objects_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_separate_shader_objects");
		if (supported_extensions.contains("GL_ARB_shader_atomic_counters") && !ARB_shader_atomic_counters_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_shader_atomic_counters");
		if (supported_extensions.contains("GL_ARB_shader_image_load_store") && !ARB_shader_image_load_store_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_shader_image_load_store");
		if (supported_extensions.contains("GL_ARB_shader_objects") && !ARB_shader_objects_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_shader_objects");
		if (supported_extensions.contains("GL_ARB_shader_storage_buffer_object") && !ARB_shader_storage_buffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_shader_storage_buffer_object");
		if (supported_extensions.contains("GL_ARB_shader_subroutine") && !ARB_shader_subroutine_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_shader_subroutine");
		if (supported_extensions.contains("GL_ARB_shading_language_include") && !ARB_shading_language_include_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_shading_language_include");
		if (supported_extensions.contains("GL_ARB_sync") && !ARB_sync_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_sync");
		if (supported_extensions.contains("GL_ARB_tessellation_shader") && !ARB_tessellation_shader_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_tessellation_shader");
		if (supported_extensions.contains("GL_ARB_texture_buffer_object") && !ARB_texture_buffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_texture_buffer_object");
		if (supported_extensions.contains("GL_ARB_texture_buffer_range") && !ARB_texture_buffer_range_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_ARB_texture_buffer_range");
		if (supported_extensions.contains("GL_ARB_texture_compression") && !ARB_texture_compression_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_texture_compression");
		if (supported_extensions.contains("GL_ARB_texture_multisample") && !ARB_texture_multisample_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_texture_multisample");
		if ((supported_extensions.contains("GL_ARB_texture_storage") || supported_extensions.contains("GL_EXT_texture_storage")) && !ARB_texture_storage_initNativeFunctionAddresses(supported_extensions)) {
			remove(supported_extensions, "GL_EXT_texture_storage");
			remove(supported_extensions, "GL_ARB_texture_storage");
		}
		if (supported_extensions.contains("GL_ARB_texture_storage_multisample") && !ARB_texture_storage_multisample_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_ARB_texture_storage_multisample");
		if (supported_extensions.contains("GL_ARB_texture_view") && !ARB_texture_view_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_texture_view");
		if (supported_extensions.contains("GL_ARB_timer_query") && !ARB_timer_query_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_timer_query");
		if (supported_extensions.contains("GL_ARB_transform_feedback2") && !ARB_transform_feedback2_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_transform_feedback2");
		if (supported_extensions.contains("GL_ARB_transform_feedback3") && !ARB_transform_feedback3_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_transform_feedback3");
		if (supported_extensions.contains("GL_ARB_transform_feedback_instanced") && !ARB_transform_feedback_instanced_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_transform_feedback_instanced");
		if (supported_extensions.contains("GL_ARB_transpose_matrix") && !ARB_transpose_matrix_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_transpose_matrix");
		if (supported_extensions.contains("GL_ARB_uniform_buffer_object") && !ARB_uniform_buffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_uniform_buffer_object");
		if (supported_extensions.contains("GL_ARB_vertex_array_object") && !ARB_vertex_array_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_vertex_array_object");
		if (supported_extensions.contains("GL_ARB_vertex_attrib_64bit") && !ARB_vertex_attrib_64bit_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_ARB_vertex_attrib_64bit");
		if (supported_extensions.contains("GL_ARB_vertex_attrib_binding") && !ARB_vertex_attrib_binding_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_vertex_attrib_binding");
		if (supported_extensions.contains("GL_ARB_vertex_blend") && !ARB_vertex_blend_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_vertex_blend");
		if (supported_extensions.contains("GL_ARB_vertex_program") && !ARB_vertex_program_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_vertex_program");
		if (supported_extensions.contains("GL_ARB_vertex_shader") && !ARB_vertex_shader_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_vertex_shader");
		if (supported_extensions.contains("GL_ARB_vertex_type_2_10_10_10_rev") && !ARB_vertex_type_2_10_10_10_rev_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_vertex_type_2_10_10_10_rev");
		if (supported_extensions.contains("GL_ARB_viewport_array") && !ARB_viewport_array_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ARB_viewport_array");
		if (supported_extensions.contains("GL_ARB_window_pos") && !ARB_window_pos_initNativeFunctionAddresses(forwardCompatible))
			remove(supported_extensions, "GL_ARB_window_pos");
		if (supported_extensions.contains("GL_ATI_draw_buffers") && !ATI_draw_buffers_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_draw_buffers");
		if (supported_extensions.contains("GL_ATI_element_array") && !ATI_element_array_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_element_array");
		if (supported_extensions.contains("GL_ATI_envmap_bumpmap") && !ATI_envmap_bumpmap_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_envmap_bumpmap");
		if (supported_extensions.contains("GL_ATI_fragment_shader") && !ATI_fragment_shader_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_fragment_shader");
		if (supported_extensions.contains("GL_ATI_map_object_buffer") && !ATI_map_object_buffer_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_map_object_buffer");
		if (supported_extensions.contains("GL_ATI_pn_triangles") && !ATI_pn_triangles_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_pn_triangles");
		if (supported_extensions.contains("GL_ATI_separate_stencil") && !ATI_separate_stencil_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_separate_stencil");
		if (supported_extensions.contains("GL_ATI_vertex_array_object") && !ATI_vertex_array_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_vertex_array_object");
		if (supported_extensions.contains("GL_ATI_vertex_attrib_array_object") && !ATI_vertex_attrib_array_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_vertex_attrib_array_object");
		if (supported_extensions.contains("GL_ATI_vertex_streams") && !ATI_vertex_streams_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_ATI_vertex_streams");
		if (supported_extensions.contains("GL_EXT_bindable_uniform") && !EXT_bindable_uniform_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_bindable_uniform");
		if (supported_extensions.contains("GL_EXT_blend_color") && !EXT_blend_color_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_blend_color");
		if (supported_extensions.contains("GL_EXT_blend_equation_separate") && !EXT_blend_equation_separate_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_blend_equation_separate");
		if (supported_extensions.contains("GL_EXT_blend_func_separate") && !EXT_blend_func_separate_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_blend_func_separate");
		if (supported_extensions.contains("GL_EXT_blend_minmax") && !EXT_blend_minmax_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_blend_minmax");
		if (supported_extensions.contains("GL_EXT_compiled_vertex_array") && !EXT_compiled_vertex_array_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_compiled_vertex_array");
		if (supported_extensions.contains("GL_EXT_depth_bounds_test") && !EXT_depth_bounds_test_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_depth_bounds_test");
		supported_extensions.add("GL_EXT_direct_state_access");
		if (supported_extensions.contains("GL_EXT_direct_state_access") && !EXT_direct_state_access_initNativeFunctionAddresses(forwardCompatible,supported_extensions))
			remove(supported_extensions, "GL_EXT_direct_state_access");
		if (supported_extensions.contains("GL_EXT_draw_buffers2") && !EXT_draw_buffers2_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_draw_buffers2");
		if (supported_extensions.contains("GL_EXT_draw_instanced") && !EXT_draw_instanced_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_draw_instanced");
		if (supported_extensions.contains("GL_EXT_draw_range_elements") && !EXT_draw_range_elements_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_draw_range_elements");
		if (supported_extensions.contains("GL_EXT_fog_coord") && !EXT_fog_coord_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_fog_coord");
		if (supported_extensions.contains("GL_EXT_framebuffer_blit") && !EXT_framebuffer_blit_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_framebuffer_blit");
		if (supported_extensions.contains("GL_EXT_framebuffer_multisample") && !EXT_framebuffer_multisample_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_framebuffer_multisample");
		if (supported_extensions.contains("GL_EXT_framebuffer_object") && !EXT_framebuffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_framebuffer_object");
		if (supported_extensions.contains("GL_EXT_geometry_shader4") && !EXT_geometry_shader4_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_geometry_shader4");
		if (supported_extensions.contains("GL_EXT_gpu_program_parameters") && !EXT_gpu_program_parameters_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_gpu_program_parameters");
		if (supported_extensions.contains("GL_EXT_gpu_shader4") && !EXT_gpu_shader4_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_gpu_shader4");
		if (supported_extensions.contains("GL_EXT_multi_draw_arrays") && !EXT_multi_draw_arrays_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_multi_draw_arrays");
		if (supported_extensions.contains("GL_EXT_paletted_texture") && !EXT_paletted_texture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_paletted_texture");
		if (supported_extensions.contains("GL_EXT_point_parameters") && !EXT_point_parameters_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_point_parameters");
		if (supported_extensions.contains("GL_EXT_provoking_vertex") && !EXT_provoking_vertex_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_provoking_vertex");
		if (supported_extensions.contains("GL_EXT_secondary_color") && !EXT_secondary_color_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_secondary_color");
		if (supported_extensions.contains("GL_EXT_separate_shader_objects") && !EXT_separate_shader_objects_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_separate_shader_objects");
		if (supported_extensions.contains("GL_EXT_shader_image_load_store") && !EXT_shader_image_load_store_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_shader_image_load_store");
		if (supported_extensions.contains("GL_EXT_stencil_clear_tag") && !EXT_stencil_clear_tag_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_stencil_clear_tag");
		if (supported_extensions.contains("GL_EXT_stencil_two_side") && !EXT_stencil_two_side_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_stencil_two_side");
		if (supported_extensions.contains("GL_EXT_texture_array") && !EXT_texture_array_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_texture_array");
		if (supported_extensions.contains("GL_EXT_texture_buffer_object") && !EXT_texture_buffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_texture_buffer_object");
		if (supported_extensions.contains("GL_EXT_texture_integer") && !EXT_texture_integer_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_texture_integer");
		if (supported_extensions.contains("GL_EXT_timer_query") && !EXT_timer_query_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_timer_query");
		if (supported_extensions.contains("GL_EXT_transform_feedback") && !EXT_transform_feedback_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_transform_feedback");
		if (supported_extensions.contains("GL_EXT_vertex_attrib_64bit") && !EXT_vertex_attrib_64bit_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_EXT_vertex_attrib_64bit");
		if (supported_extensions.contains("GL_EXT_vertex_shader") && !EXT_vertex_shader_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_vertex_shader");
		if (supported_extensions.contains("GL_EXT_vertex_weighting") && !EXT_vertex_weighting_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_EXT_vertex_weighting");
		if (supported_extensions.contains("OpenGL12") && !GL12_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL12");
		if (supported_extensions.contains("OpenGL13") && !GL13_initNativeFunctionAddresses(forwardCompatible))
			remove(supported_extensions, "OpenGL13");
		if (supported_extensions.contains("OpenGL14") && !GL14_initNativeFunctionAddresses(forwardCompatible))
			remove(supported_extensions, "OpenGL14");
		if (supported_extensions.contains("OpenGL15") && !GL15_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL15");
		if (supported_extensions.contains("OpenGL20") && !GL20_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL20");
		if (supported_extensions.contains("OpenGL21") && !GL21_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL21");
		if (supported_extensions.contains("OpenGL30") && !GL30_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL30");
		if (supported_extensions.contains("OpenGL31") && !GL31_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL31");
		if (supported_extensions.contains("OpenGL32") && !GL32_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL32");
		if (supported_extensions.contains("OpenGL33") && !GL33_initNativeFunctionAddresses(forwardCompatible))
			remove(supported_extensions, "OpenGL33");
		if (supported_extensions.contains("OpenGL40") && !GL40_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL40");
		if (supported_extensions.contains("OpenGL41") && !GL41_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL41");
		if (supported_extensions.contains("OpenGL42") && !GL42_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL42");
		if (supported_extensions.contains("OpenGL43") && !GL43_initNativeFunctionAddresses())
			remove(supported_extensions, "OpenGL43");
		if (supported_extensions.contains("GL_GREMEDY_frame_terminator") && !GREMEDY_frame_terminator_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_GREMEDY_frame_terminator");
		if (supported_extensions.contains("GL_GREMEDY_string_marker") && !GREMEDY_string_marker_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_GREMEDY_string_marker");
		if (supported_extensions.contains("GL_INTEL_map_texture") && !INTEL_map_texture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_INTEL_map_texture");
		if (supported_extensions.contains("GL_KHR_debug") && !KHR_debug_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_KHR_debug");
		if (supported_extensions.contains("GL_NV_bindless_texture") && !NV_bindless_texture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_bindless_texture");
		if (supported_extensions.contains("GL_NV_conditional_render") && !NV_conditional_render_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_conditional_render");
		if (supported_extensions.contains("GL_NV_copy_image") && !NV_copy_image_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_copy_image");
		if (supported_extensions.contains("GL_NV_depth_buffer_float") && !NV_depth_buffer_float_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_depth_buffer_float");
		if (supported_extensions.contains("GL_NV_draw_texture") && !NV_draw_texture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_draw_texture");
		if (supported_extensions.contains("GL_NV_evaluators") && !NV_evaluators_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_evaluators");
		if (supported_extensions.contains("GL_NV_explicit_multisample") && !NV_explicit_multisample_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_explicit_multisample");
		if (supported_extensions.contains("GL_NV_fence") && !NV_fence_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_fence");
		if (supported_extensions.contains("GL_NV_fragment_program") && !NV_fragment_program_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_fragment_program");
		if (supported_extensions.contains("GL_NV_framebuffer_multisample_coverage") && !NV_framebuffer_multisample_coverage_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_framebuffer_multisample_coverage");
		if (supported_extensions.contains("GL_NV_geometry_program4") && !NV_geometry_program4_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_geometry_program4");
		if (supported_extensions.contains("GL_NV_gpu_program4") && !NV_gpu_program4_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_gpu_program4");
		if (supported_extensions.contains("GL_NV_gpu_shader5") && !NV_gpu_shader5_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_NV_gpu_shader5");
		if (supported_extensions.contains("GL_NV_half_float") && !NV_half_float_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_half_float");
		if (supported_extensions.contains("GL_NV_occlusion_query") && !NV_occlusion_query_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_occlusion_query");
		if (supported_extensions.contains("GL_NV_parameter_buffer_object") && !NV_parameter_buffer_object_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_parameter_buffer_object");
		if (supported_extensions.contains("GL_NV_path_rendering") && !NV_path_rendering_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_path_rendering");
		if (supported_extensions.contains("GL_NV_pixel_data_range") && !NV_pixel_data_range_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_pixel_data_range");
		if (supported_extensions.contains("GL_NV_point_sprite") && !NV_point_sprite_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_point_sprite");
		if (supported_extensions.contains("GL_NV_present_video") && !NV_present_video_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_present_video");
		supported_extensions.add("GL_NV_primitive_restart");
		if (supported_extensions.contains("GL_NV_primitive_restart") && !NV_primitive_restart_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_primitive_restart");
		if (supported_extensions.contains("GL_NV_program") && !NV_program_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_program");
		if (supported_extensions.contains("GL_NV_register_combiners") && !NV_register_combiners_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_register_combiners");
		if (supported_extensions.contains("GL_NV_register_combiners2") && !NV_register_combiners2_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_register_combiners2");
		if (supported_extensions.contains("GL_NV_shader_buffer_load") && !NV_shader_buffer_load_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_shader_buffer_load");
		if (supported_extensions.contains("GL_NV_texture_barrier") && !NV_texture_barrier_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_texture_barrier");
		if (supported_extensions.contains("GL_NV_texture_multisample") && !NV_texture_multisample_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_texture_multisample");
		if (supported_extensions.contains("GL_NV_transform_feedback") && !NV_transform_feedback_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_transform_feedback");
		if (supported_extensions.contains("GL_NV_transform_feedback2") && !NV_transform_feedback2_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_transform_feedback2");
		if (supported_extensions.contains("GL_NV_vertex_array_range") && !NV_vertex_array_range_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_vertex_array_range");
		if (supported_extensions.contains("GL_NV_vertex_attrib_integer_64bit") && !NV_vertex_attrib_integer_64bit_initNativeFunctionAddresses(supported_extensions))
			remove(supported_extensions, "GL_NV_vertex_attrib_integer_64bit");
		if (supported_extensions.contains("GL_NV_vertex_buffer_unified_memory") && !NV_vertex_buffer_unified_memory_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_vertex_buffer_unified_memory");
		if (supported_extensions.contains("GL_NV_vertex_program") && !NV_vertex_program_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_vertex_program");
		if (supported_extensions.contains("GL_NV_video_capture") && !NV_video_capture_initNativeFunctionAddresses())
			remove(supported_extensions, "GL_NV_video_capture");
		return supported_extensions;
	}

	static void unloadAllStubs() {
	}

	ContextCapabilities(boolean forwardCompatible) throws LWJGLException {
		Set<String> supported_extensions = initAllStubs(forwardCompatible);
		this.GL_AMD_blend_minmax_factor = supported_extensions.contains("GL_AMD_blend_minmax_factor");
		this.GL_AMD_conservative_depth = supported_extensions.contains("GL_AMD_conservative_depth");
		this.GL_AMD_debug_output = supported_extensions.contains("GL_AMD_debug_output")
			|| supported_extensions.contains("GL_AMDX_debug_output");
		this.GL_AMD_depth_clamp_separate = supported_extensions.contains("GL_AMD_depth_clamp_separate");
		this.GL_AMD_draw_buffers_blend = supported_extensions.contains("GL_AMD_draw_buffers_blend");
		this.GL_AMD_multi_draw_indirect = supported_extensions.contains("GL_AMD_multi_draw_indirect");
		this.GL_AMD_name_gen_delete = supported_extensions.contains("GL_AMD_name_gen_delete");
		this.GL_AMD_performance_monitor = supported_extensions.contains("GL_AMD_performance_monitor");
		this.GL_AMD_pinned_memory = supported_extensions.contains("GL_AMD_pinned_memory");
		this.GL_AMD_query_buffer_object = supported_extensions.contains("GL_AMD_query_buffer_object");
		this.GL_AMD_sample_positions = supported_extensions.contains("GL_AMD_sample_positions");
		this.GL_AMD_seamless_cubemap_per_texture = supported_extensions.contains("GL_AMD_seamless_cubemap_per_texture");
		this.GL_AMD_shader_stencil_export = supported_extensions.contains("GL_AMD_shader_stencil_export");
		this.GL_AMD_shader_trinary_minmax = supported_extensions.contains("GL_AMD_shader_trinary_minmax");
		this.GL_AMD_sparse_texture = supported_extensions.contains("GL_AMD_sparse_texture");
		this.GL_AMD_stencil_operation_extended = supported_extensions.contains("GL_AMD_stencil_operation_extended");
		this.GL_AMD_texture_texture4 = supported_extensions.contains("GL_AMD_texture_texture4");
		this.GL_AMD_transform_feedback3_lines_triangles = supported_extensions.contains("GL_AMD_transform_feedback3_lines_triangles");
		this.GL_AMD_vertex_shader_layer = supported_extensions.contains("GL_AMD_vertex_shader_layer");
		this.GL_AMD_vertex_shader_tessellator = supported_extensions.contains("GL_AMD_vertex_shader_tessellator");
		this.GL_AMD_vertex_shader_viewport_index = supported_extensions.contains("GL_AMD_vertex_shader_viewport_index");
		this.GL_APPLE_aux_depth_stencil = supported_extensions.contains("GL_APPLE_aux_depth_stencil");
		this.GL_APPLE_client_storage = supported_extensions.contains("GL_APPLE_client_storage");
		this.GL_APPLE_element_array = supported_extensions.contains("GL_APPLE_element_array");
		this.GL_APPLE_fence = supported_extensions.contains("GL_APPLE_fence");
		this.GL_APPLE_float_pixels = supported_extensions.contains("GL_APPLE_float_pixels");
		this.GL_APPLE_flush_buffer_range = supported_extensions.contains("GL_APPLE_flush_buffer_range");
		this.GL_APPLE_object_purgeable = supported_extensions.contains("GL_APPLE_object_purgeable");
		this.GL_APPLE_packed_pixels = supported_extensions.contains("GL_APPLE_packed_pixels");
		this.GL_APPLE_rgb_422 = supported_extensions.contains("GL_APPLE_rgb_422");
		this.GL_APPLE_row_bytes = supported_extensions.contains("GL_APPLE_row_bytes");
		this.GL_APPLE_texture_range = supported_extensions.contains("GL_APPLE_texture_range");
		this.GL_APPLE_vertex_array_object = supported_extensions.contains("GL_APPLE_vertex_array_object");
		this.GL_APPLE_vertex_array_range = supported_extensions.contains("GL_APPLE_vertex_array_range");
		this.GL_APPLE_vertex_program_evaluators = supported_extensions.contains("GL_APPLE_vertex_program_evaluators");
		this.GL_APPLE_ycbcr_422 = supported_extensions.contains("GL_APPLE_ycbcr_422");
		this.GL_ARB_ES2_compatibility = supported_extensions.contains("GL_ARB_ES2_compatibility");
		this.GL_ARB_ES3_compatibility = supported_extensions.contains("GL_ARB_ES3_compatibility");
		this.GL_ARB_arrays_of_arrays = supported_extensions.contains("GL_ARB_arrays_of_arrays");
		this.GL_ARB_base_instance = supported_extensions.contains("GL_ARB_base_instance");
		this.GL_ARB_blend_func_extended = supported_extensions.contains("GL_ARB_blend_func_extended");
		this.GL_ARB_cl_event = supported_extensions.contains("GL_ARB_cl_event");
		this.GL_ARB_clear_buffer_object = supported_extensions.contains("GL_ARB_clear_buffer_object");
		this.GL_ARB_color_buffer_float = supported_extensions.contains("GL_ARB_color_buffer_float");
		this.GL_ARB_compatibility = supported_extensions.contains("GL_ARB_compatibility");
		this.GL_ARB_compressed_texture_pixel_storage = supported_extensions.contains("GL_ARB_compressed_texture_pixel_storage");
		this.GL_ARB_compute_shader = supported_extensions.contains("GL_ARB_compute_shader");
		this.GL_ARB_conservative_depth = supported_extensions.contains("GL_ARB_conservative_depth");
		this.GL_ARB_copy_buffer = supported_extensions.contains("GL_ARB_copy_buffer");
		this.GL_ARB_copy_image = supported_extensions.contains("GL_ARB_copy_image");
		this.GL_ARB_debug_output = supported_extensions.contains("GL_ARB_debug_output");
		this.GL_ARB_depth_buffer_float = supported_extensions.contains("GL_ARB_depth_buffer_float");
		this.GL_ARB_depth_clamp = supported_extensions.contains("GL_ARB_depth_clamp");
		this.GL_ARB_depth_texture = supported_extensions.contains("GL_ARB_depth_texture");
		this.GL_ARB_draw_buffers = supported_extensions.contains("GL_ARB_draw_buffers");
		this.GL_ARB_draw_buffers_blend = supported_extensions.contains("GL_ARB_draw_buffers_blend");
		this.GL_ARB_draw_elements_base_vertex = supported_extensions.contains("GL_ARB_draw_elements_base_vertex");
		this.GL_ARB_draw_indirect = supported_extensions.contains("GL_ARB_draw_indirect");
		this.GL_ARB_draw_instanced = supported_extensions.contains("GL_ARB_draw_instanced");
		this.GL_ARB_explicit_attrib_location = supported_extensions.contains("GL_ARB_explicit_attrib_location");
		this.GL_ARB_explicit_uniform_location = supported_extensions.contains("GL_ARB_explicit_uniform_location");
		this.GL_ARB_fragment_coord_conventions = supported_extensions.contains("GL_ARB_fragment_coord_conventions");
		this.GL_ARB_fragment_layer_viewport = supported_extensions.contains("GL_ARB_fragment_layer_viewport");
		this.GL_ARB_fragment_program = supported_extensions.contains("GL_ARB_fragment_program")
			&& supported_extensions.contains("GL_ARB_program");
		this.GL_ARB_fragment_program_shadow = supported_extensions.contains("GL_ARB_fragment_program_shadow");
		this.GL_ARB_fragment_shader = supported_extensions.contains("GL_ARB_fragment_shader");
		this.GL_ARB_framebuffer_no_attachments = supported_extensions.contains("GL_ARB_framebuffer_no_attachments");
		this.GL_ARB_framebuffer_object = supported_extensions.contains("GL_ARB_framebuffer_object");
		this.GL_ARB_framebuffer_sRGB = supported_extensions.contains("GL_ARB_framebuffer_sRGB");
		this.GL_ARB_geometry_shader4 = supported_extensions.contains("GL_ARB_geometry_shader4");
		this.GL_ARB_get_program_binary = supported_extensions.contains("GL_ARB_get_program_binary");
		this.GL_ARB_gpu_shader5 = supported_extensions.contains("GL_ARB_gpu_shader5");
		this.GL_ARB_gpu_shader_fp64 = supported_extensions.contains("GL_ARB_gpu_shader_fp64");
		this.GL_ARB_half_float_pixel = supported_extensions.contains("GL_ARB_half_float_pixel");
		this.GL_ARB_half_float_vertex = supported_extensions.contains("GL_ARB_half_float_vertex");
		this.GL_ARB_imaging = supported_extensions.contains("GL_ARB_imaging");
		this.GL_ARB_instanced_arrays = supported_extensions.contains("GL_ARB_instanced_arrays");
		this.GL_ARB_internalformat_query = supported_extensions.contains("GL_ARB_internalformat_query");
		this.GL_ARB_internalformat_query2 = supported_extensions.contains("GL_ARB_internalformat_query2");
		this.GL_ARB_invalidate_subdata = supported_extensions.contains("GL_ARB_invalidate_subdata");
		this.GL_ARB_map_buffer_alignment = supported_extensions.contains("GL_ARB_map_buffer_alignment");
		this.GL_ARB_map_buffer_range = supported_extensions.contains("GL_ARB_map_buffer_range");
		this.GL_ARB_matrix_palette = supported_extensions.contains("GL_ARB_matrix_palette");
		this.GL_ARB_multi_draw_indirect = supported_extensions.contains("GL_ARB_multi_draw_indirect");
		this.GL_ARB_multisample = supported_extensions.contains("GL_ARB_multisample");
		this.GL_ARB_multitexture = supported_extensions.contains("GL_ARB_multitexture");
		this.GL_ARB_occlusion_query = supported_extensions.contains("GL_ARB_occlusion_query");
		this.GL_ARB_occlusion_query2 = supported_extensions.contains("GL_ARB_occlusion_query2");
		this.GL_ARB_pixel_buffer_object = supported_extensions.contains("GL_ARB_pixel_buffer_object")
			&& supported_extensions.contains("GL_ARB_buffer_object");
		this.GL_ARB_point_parameters = supported_extensions.contains("GL_ARB_point_parameters");
		this.GL_ARB_point_sprite = supported_extensions.contains("GL_ARB_point_sprite");
		this.GL_ARB_program_interface_query = supported_extensions.contains("GL_ARB_program_interface_query");
		this.GL_ARB_provoking_vertex = supported_extensions.contains("GL_ARB_provoking_vertex");
		this.GL_ARB_robust_buffer_access_behavior = supported_extensions.contains("GL_ARB_robust_buffer_access_behavior");
		this.GL_ARB_robustness = supported_extensions.contains("GL_ARB_robustness");
		this.GL_ARB_robustness_isolation = supported_extensions.contains("GL_ARB_robustness_isolation");
		this.GL_ARB_sample_shading = supported_extensions.contains("GL_ARB_sample_shading");
		this.GL_ARB_sampler_objects = supported_extensions.contains("GL_ARB_sampler_objects");
		this.GL_ARB_seamless_cube_map = supported_extensions.contains("GL_ARB_seamless_cube_map");
		this.GL_ARB_separate_shader_objects = supported_extensions.contains("GL_ARB_separate_shader_objects");
		this.GL_ARB_shader_atomic_counters = supported_extensions.contains("GL_ARB_shader_atomic_counters");
		this.GL_ARB_shader_bit_encoding = supported_extensions.contains("GL_ARB_shader_bit_encoding");
		this.GL_ARB_shader_image_load_store = supported_extensions.contains("GL_ARB_shader_image_load_store");
		this.GL_ARB_shader_image_size = supported_extensions.contains("GL_ARB_shader_image_size");
		this.GL_ARB_shader_objects = supported_extensions.contains("GL_ARB_shader_objects");
		this.GL_ARB_shader_precision = supported_extensions.contains("GL_ARB_shader_precision");
		this.GL_ARB_shader_stencil_export = supported_extensions.contains("GL_ARB_shader_stencil_export");
		this.GL_ARB_shader_storage_buffer_object = supported_extensions.contains("GL_ARB_shader_storage_buffer_object");
		this.GL_ARB_shader_subroutine = supported_extensions.contains("GL_ARB_shader_subroutine");
		this.GL_ARB_shader_texture_lod = supported_extensions.contains("GL_ARB_shader_texture_lod");
		this.GL_ARB_shading_language_100 = supported_extensions.contains("GL_ARB_shading_language_100");
		this.GL_ARB_shading_language_420pack = supported_extensions.contains("GL_ARB_shading_language_420pack");
		this.GL_ARB_shading_language_include = supported_extensions.contains("GL_ARB_shading_language_include");
		this.GL_ARB_shading_language_packing = supported_extensions.contains("GL_ARB_shading_language_packing");
		this.GL_ARB_shadow = supported_extensions.contains("GL_ARB_shadow");
		this.GL_ARB_shadow_ambient = supported_extensions.contains("GL_ARB_shadow_ambient");
		this.GL_ARB_stencil_texturing = supported_extensions.contains("GL_ARB_stencil_texturing");
		this.GL_ARB_sync = supported_extensions.contains("GL_ARB_sync");
		this.GL_ARB_tessellation_shader = supported_extensions.contains("GL_ARB_tessellation_shader");
		this.GL_ARB_texture_border_clamp = supported_extensions.contains("GL_ARB_texture_border_clamp");
		this.GL_ARB_texture_buffer_object = supported_extensions.contains("GL_ARB_texture_buffer_object");
		this.GL_ARB_texture_buffer_object_rgb32 = supported_extensions.contains("GL_ARB_texture_buffer_object_rgb32")
			|| supported_extensions.contains("GL_EXT_texture_buffer_object_rgb32");
		this.GL_ARB_texture_buffer_range = supported_extensions.contains("GL_ARB_texture_buffer_range");
		this.GL_ARB_texture_compression = supported_extensions.contains("GL_ARB_texture_compression");
		this.GL_ARB_texture_compression_bptc = supported_extensions.contains("GL_ARB_texture_compression_bptc")
			|| supported_extensions.contains("GL_EXT_texture_compression_bptc");
		this.GL_ARB_texture_compression_rgtc = supported_extensions.contains("GL_ARB_texture_compression_rgtc");
		this.GL_ARB_texture_cube_map = supported_extensions.contains("GL_ARB_texture_cube_map");
		this.GL_ARB_texture_cube_map_array = supported_extensions.contains("GL_ARB_texture_cube_map_array");
		this.GL_ARB_texture_env_add = supported_extensions.contains("GL_ARB_texture_env_add");
		this.GL_ARB_texture_env_combine = supported_extensions.contains("GL_ARB_texture_env_combine");
		this.GL_ARB_texture_env_crossbar = supported_extensions.contains("GL_ARB_texture_env_crossbar");
		this.GL_ARB_texture_env_dot3 = supported_extensions.contains("GL_ARB_texture_env_dot3");
		this.GL_ARB_texture_float = supported_extensions.contains("GL_ARB_texture_float");
		this.GL_ARB_texture_gather = supported_extensions.contains("GL_ARB_texture_gather");
		this.GL_ARB_texture_mirrored_repeat = supported_extensions.contains("GL_ARB_texture_mirrored_repeat");
		this.GL_ARB_texture_multisample = supported_extensions.contains("GL_ARB_texture_multisample");
		this.GL_ARB_texture_non_power_of_two = supported_extensions.contains("GL_ARB_texture_non_power_of_two");
		this.GL_ARB_texture_query_levels = supported_extensions.contains("GL_ARB_texture_query_levels");
		this.GL_ARB_texture_query_lod = supported_extensions.contains("GL_ARB_texture_query_lod");
		this.GL_ARB_texture_rectangle = supported_extensions.contains("GL_ARB_texture_rectangle");
		this.GL_ARB_texture_rg = supported_extensions.contains("GL_ARB_texture_rg");
		this.GL_ARB_texture_rgb10_a2ui = supported_extensions.contains("GL_ARB_texture_rgb10_a2ui");
		this.GL_ARB_texture_storage = supported_extensions.contains("GL_ARB_texture_storage")
			|| supported_extensions.contains("GL_EXT_texture_storage");
		this.GL_ARB_texture_storage_multisample = supported_extensions.contains("GL_ARB_texture_storage_multisample");
		this.GL_ARB_texture_swizzle = supported_extensions.contains("GL_ARB_texture_swizzle");
		this.GL_ARB_texture_view = supported_extensions.contains("GL_ARB_texture_view");
		this.GL_ARB_timer_query = supported_extensions.contains("GL_ARB_timer_query");
		this.GL_ARB_transform_feedback2 = supported_extensions.contains("GL_ARB_transform_feedback2");
		this.GL_ARB_transform_feedback3 = supported_extensions.contains("GL_ARB_transform_feedback3");
		this.GL_ARB_transform_feedback_instanced = supported_extensions.contains("GL_ARB_transform_feedback_instanced");
		this.GL_ARB_transpose_matrix = supported_extensions.contains("GL_ARB_transpose_matrix");
		this.GL_ARB_uniform_buffer_object = supported_extensions.contains("GL_ARB_uniform_buffer_object");
		this.GL_ARB_vertex_array_bgra = supported_extensions.contains("GL_ARB_vertex_array_bgra");
		this.GL_ARB_vertex_array_object = supported_extensions.contains("GL_ARB_vertex_array_object");
		this.GL_ARB_vertex_attrib_64bit = supported_extensions.contains("GL_ARB_vertex_attrib_64bit");
		this.GL_ARB_vertex_attrib_binding = supported_extensions.contains("GL_ARB_vertex_attrib_binding");
		this.GL_ARB_vertex_blend = supported_extensions.contains("GL_ARB_vertex_blend");
		this.GL_ARB_vertex_buffer_object = supported_extensions.contains("GL_ARB_vertex_buffer_object")
			&& supported_extensions.contains("GL_ARB_buffer_object");
		this.GL_ARB_vertex_program = supported_extensions.contains("GL_ARB_vertex_program")
			&& supported_extensions.contains("GL_ARB_program");
		this.GL_ARB_vertex_shader = supported_extensions.contains("GL_ARB_vertex_shader");
		this.GL_ARB_vertex_type_2_10_10_10_rev = supported_extensions.contains("GL_ARB_vertex_type_2_10_10_10_rev");
		this.GL_ARB_viewport_array = supported_extensions.contains("GL_ARB_viewport_array");
		this.GL_ARB_window_pos = supported_extensions.contains("GL_ARB_window_pos");
		this.GL_ATI_draw_buffers = supported_extensions.contains("GL_ATI_draw_buffers");
		this.GL_ATI_element_array = supported_extensions.contains("GL_ATI_element_array");
		this.GL_ATI_envmap_bumpmap = supported_extensions.contains("GL_ATI_envmap_bumpmap");
		this.GL_ATI_fragment_shader = supported_extensions.contains("GL_ATI_fragment_shader");
		this.GL_ATI_map_object_buffer = supported_extensions.contains("GL_ATI_map_object_buffer");
		this.GL_ATI_meminfo = supported_extensions.contains("GL_ATI_meminfo");
		this.GL_ATI_pn_triangles = supported_extensions.contains("GL_ATI_pn_triangles");
		this.GL_ATI_separate_stencil = supported_extensions.contains("GL_ATI_separate_stencil");
		this.GL_ATI_shader_texture_lod = supported_extensions.contains("GL_ATI_shader_texture_lod");
		this.GL_ATI_text_fragment_shader = supported_extensions.contains("GL_ATI_text_fragment_shader");
		this.GL_ATI_texture_compression_3dc = supported_extensions.contains("GL_ATI_texture_compression_3dc");
		this.GL_ATI_texture_env_combine3 = supported_extensions.contains("GL_ATI_texture_env_combine3");
		this.GL_ATI_texture_float = supported_extensions.contains("GL_ATI_texture_float");
		this.GL_ATI_texture_mirror_once = supported_extensions.contains("GL_ATI_texture_mirror_once");
		this.GL_ATI_vertex_array_object = supported_extensions.contains("GL_ATI_vertex_array_object");
		this.GL_ATI_vertex_attrib_array_object = supported_extensions.contains("GL_ATI_vertex_attrib_array_object");
		this.GL_ATI_vertex_streams = supported_extensions.contains("GL_ATI_vertex_streams");
		this.GL_EXT_abgr = supported_extensions.contains("GL_EXT_abgr");
		this.GL_EXT_bgra = supported_extensions.contains("GL_EXT_bgra");
		this.GL_EXT_bindable_uniform = supported_extensions.contains("GL_EXT_bindable_uniform");
		this.GL_EXT_blend_color = supported_extensions.contains("GL_EXT_blend_color");
		this.GL_EXT_blend_equation_separate = supported_extensions.contains("GL_EXT_blend_equation_separate");
		this.GL_EXT_blend_func_separate = supported_extensions.contains("GL_EXT_blend_func_separate");
		this.GL_EXT_blend_minmax = supported_extensions.contains("GL_EXT_blend_minmax");
		this.GL_EXT_blend_subtract = supported_extensions.contains("GL_EXT_blend_subtract");
		this.GL_EXT_Cg_shader = supported_extensions.contains("GL_EXT_Cg_shader");
		this.GL_EXT_compiled_vertex_array = supported_extensions.contains("GL_EXT_compiled_vertex_array");
		this.GL_EXT_depth_bounds_test = supported_extensions.contains("GL_EXT_depth_bounds_test");
		this.GL_EXT_direct_state_access = supported_extensions.contains("GL_EXT_direct_state_access");
		this.GL_EXT_draw_buffers2 = supported_extensions.contains("GL_EXT_draw_buffers2");
		this.GL_EXT_draw_instanced = supported_extensions.contains("GL_EXT_draw_instanced");
		this.GL_EXT_draw_range_elements = supported_extensions.contains("GL_EXT_draw_range_elements");
		this.GL_EXT_fog_coord = supported_extensions.contains("GL_EXT_fog_coord");
		this.GL_EXT_framebuffer_blit = supported_extensions.contains("GL_EXT_framebuffer_blit");
		this.GL_EXT_framebuffer_multisample = supported_extensions.contains("GL_EXT_framebuffer_multisample");
		this.GL_EXT_framebuffer_multisample_blit_scaled = supported_extensions.contains("GL_EXT_framebuffer_multisample_blit_scaled");
		this.GL_EXT_framebuffer_object = supported_extensions.contains("GL_EXT_framebuffer_object");
		this.GL_EXT_framebuffer_sRGB = supported_extensions.contains("GL_EXT_framebuffer_sRGB");
		this.GL_EXT_geometry_shader4 = supported_extensions.contains("GL_EXT_geometry_shader4");
		this.GL_EXT_gpu_program_parameters = supported_extensions.contains("GL_EXT_gpu_program_parameters");
		this.GL_EXT_gpu_shader4 = supported_extensions.contains("GL_EXT_gpu_shader4");
		this.GL_EXT_multi_draw_arrays = supported_extensions.contains("GL_EXT_multi_draw_arrays");
		this.GL_EXT_packed_depth_stencil = supported_extensions.contains("GL_EXT_packed_depth_stencil");
		this.GL_EXT_packed_float = supported_extensions.contains("GL_EXT_packed_float");
		this.GL_EXT_packed_pixels = supported_extensions.contains("GL_EXT_packed_pixels");
		this.GL_EXT_paletted_texture = supported_extensions.contains("GL_EXT_paletted_texture");
		this.GL_EXT_pixel_buffer_object = supported_extensions.contains("GL_EXT_pixel_buffer_object")
			&& supported_extensions.contains("GL_ARB_buffer_object");
		this.GL_EXT_point_parameters = supported_extensions.contains("GL_EXT_point_parameters");
		this.GL_EXT_provoking_vertex = supported_extensions.contains("GL_EXT_provoking_vertex");
		this.GL_EXT_rescale_normal = supported_extensions.contains("GL_EXT_rescale_normal");
		this.GL_EXT_secondary_color = supported_extensions.contains("GL_EXT_secondary_color");
		this.GL_EXT_separate_shader_objects = supported_extensions.contains("GL_EXT_separate_shader_objects");
		this.GL_EXT_separate_specular_color = supported_extensions.contains("GL_EXT_separate_specular_color");
		this.GL_EXT_shader_image_load_store = supported_extensions.contains("GL_EXT_shader_image_load_store");
		this.GL_EXT_shadow_funcs = supported_extensions.contains("GL_EXT_shadow_funcs");
		this.GL_EXT_shared_texture_palette = supported_extensions.contains("GL_EXT_shared_texture_palette");
		this.GL_EXT_stencil_clear_tag = supported_extensions.contains("GL_EXT_stencil_clear_tag");
		this.GL_EXT_stencil_two_side = supported_extensions.contains("GL_EXT_stencil_two_side");
		this.GL_EXT_stencil_wrap = supported_extensions.contains("GL_EXT_stencil_wrap");
		this.GL_EXT_texture_3d = supported_extensions.contains("GL_EXT_texture_3d");
		this.GL_EXT_texture_array = supported_extensions.contains("GL_EXT_texture_array");
		this.GL_EXT_texture_buffer_object = supported_extensions.contains("GL_EXT_texture_buffer_object");
		this.GL_EXT_texture_compression_latc = supported_extensions.contains("GL_EXT_texture_compression_latc");
		this.GL_EXT_texture_compression_rgtc = supported_extensions.contains("GL_EXT_texture_compression_rgtc");
		this.GL_EXT_texture_compression_s3tc = supported_extensions.contains("GL_EXT_texture_compression_s3tc");
		this.GL_EXT_texture_env_combine = supported_extensions.contains("GL_EXT_texture_env_combine");
		this.GL_EXT_texture_env_dot3 = supported_extensions.contains("GL_EXT_texture_env_dot3");
		this.GL_EXT_texture_filter_anisotropic = supported_extensions.contains("GL_EXT_texture_filter_anisotropic");
		this.GL_EXT_texture_integer = supported_extensions.contains("GL_EXT_texture_integer");
		this.GL_EXT_texture_lod_bias = supported_extensions.contains("GL_EXT_texture_lod_bias");
		this.GL_EXT_texture_mirror_clamp = supported_extensions.contains("GL_EXT_texture_mirror_clamp");
		this.GL_EXT_texture_rectangle = supported_extensions.contains("GL_EXT_texture_rectangle");
		this.GL_EXT_texture_sRGB = supported_extensions.contains("GL_EXT_texture_sRGB");
		this.GL_EXT_texture_sRGB_decode = supported_extensions.contains("GL_EXT_texture_sRGB_decode");
		this.GL_EXT_texture_shared_exponent = supported_extensions.contains("GL_EXT_texture_shared_exponent");
		this.GL_EXT_texture_snorm = supported_extensions.contains("GL_EXT_texture_snorm");
		this.GL_EXT_texture_swizzle = supported_extensions.contains("GL_EXT_texture_swizzle");
		this.GL_EXT_timer_query = supported_extensions.contains("GL_EXT_timer_query");
		this.GL_EXT_transform_feedback = supported_extensions.contains("GL_EXT_transform_feedback");
		this.GL_EXT_vertex_array_bgra = supported_extensions.contains("GL_EXT_vertex_array_bgra");
		this.GL_EXT_vertex_attrib_64bit = supported_extensions.contains("GL_EXT_vertex_attrib_64bit");
		this.GL_EXT_vertex_shader = supported_extensions.contains("GL_EXT_vertex_shader");
		this.GL_EXT_vertex_weighting = supported_extensions.contains("GL_EXT_vertex_weighting");
		this.OpenGL11 = supported_extensions.contains("OpenGL11");
		this.OpenGL12 = supported_extensions.contains("OpenGL12");
		this.OpenGL13 = supported_extensions.contains("OpenGL13");
		this.OpenGL14 = supported_extensions.contains("OpenGL14");
		this.OpenGL15 = supported_extensions.contains("OpenGL15");
		this.OpenGL20 = supported_extensions.contains("OpenGL20");
		this.OpenGL21 = supported_extensions.contains("OpenGL21");
		this.OpenGL30 = supported_extensions.contains("OpenGL30");
		this.OpenGL31 = supported_extensions.contains("OpenGL31");
		this.OpenGL32 = supported_extensions.contains("OpenGL32");
		this.OpenGL33 = supported_extensions.contains("OpenGL33");
		this.OpenGL40 = supported_extensions.contains("OpenGL40");
		this.OpenGL41 = supported_extensions.contains("OpenGL41");
		this.OpenGL42 = supported_extensions.contains("OpenGL42");
		this.OpenGL43 = supported_extensions.contains("OpenGL43");
		this.GL_GREMEDY_frame_terminator = supported_extensions.contains("GL_GREMEDY_frame_terminator");
		this.GL_GREMEDY_string_marker = supported_extensions.contains("GL_GREMEDY_string_marker");
		this.GL_HP_occlusion_test = supported_extensions.contains("GL_HP_occlusion_test");
		this.GL_IBM_rasterpos_clip = supported_extensions.contains("GL_IBM_rasterpos_clip");
		this.GL_INTEL_map_texture = supported_extensions.contains("GL_INTEL_map_texture");
		this.GL_KHR_debug = supported_extensions.contains("GL_KHR_debug");
		this.GL_KHR_texture_compression_astc_ldr = supported_extensions.contains("GL_KHR_texture_compression_astc_ldr");
		this.GL_NVX_gpu_memory_info = supported_extensions.contains("GL_NVX_gpu_memory_info");
		this.GL_NV_bindless_texture = supported_extensions.contains("GL_NV_bindless_texture");
		this.GL_NV_blend_square = supported_extensions.contains("GL_NV_blend_square");
		this.GL_NV_compute_program5 = supported_extensions.contains("GL_NV_compute_program5");
		this.GL_NV_conditional_render = supported_extensions.contains("GL_NV_conditional_render");
		this.GL_NV_copy_depth_to_color = supported_extensions.contains("GL_NV_copy_depth_to_color");
		this.GL_NV_copy_image = supported_extensions.contains("GL_NV_copy_image");
		this.GL_NV_deep_texture3D = supported_extensions.contains("GL_NV_deep_texture3D");
		this.GL_NV_depth_buffer_float = supported_extensions.contains("GL_NV_depth_buffer_float");
		this.GL_NV_depth_clamp = supported_extensions.contains("GL_NV_depth_clamp");
		this.GL_NV_draw_texture = supported_extensions.contains("GL_NV_draw_texture");
		this.GL_NV_evaluators = supported_extensions.contains("GL_NV_evaluators");
		this.GL_NV_explicit_multisample = supported_extensions.contains("GL_NV_explicit_multisample");
		this.GL_NV_fence = supported_extensions.contains("GL_NV_fence");
		this.GL_NV_float_buffer = supported_extensions.contains("GL_NV_float_buffer");
		this.GL_NV_fog_distance = supported_extensions.contains("GL_NV_fog_distance");
		this.GL_NV_fragment_program = supported_extensions.contains("GL_NV_fragment_program")
			&& supported_extensions.contains("GL_NV_program");
		this.GL_NV_fragment_program2 = supported_extensions.contains("GL_NV_fragment_program2");
		this.GL_NV_fragment_program4 = supported_extensions.contains("GL_NV_fragment_program4");
		this.GL_NV_fragment_program_option = supported_extensions.contains("GL_NV_fragment_program_option");
		this.GL_NV_framebuffer_multisample_coverage = supported_extensions.contains("GL_NV_framebuffer_multisample_coverage");
		this.GL_NV_geometry_program4 = supported_extensions.contains("GL_NV_geometry_program4");
		this.GL_NV_geometry_shader4 = supported_extensions.contains("GL_NV_geometry_shader4");
		this.GL_NV_gpu_program4 = supported_extensions.contains("GL_NV_gpu_program4");
		this.GL_NV_gpu_program5 = supported_extensions.contains("GL_NV_gpu_program5");
		this.GL_NV_gpu_shader5 = supported_extensions.contains("GL_NV_gpu_shader5");
		this.GL_NV_half_float = supported_extensions.contains("GL_NV_half_float");
		this.GL_NV_light_max_exponent = supported_extensions.contains("GL_NV_light_max_exponent");
		this.GL_NV_multisample_coverage = supported_extensions.contains("GL_NV_multisample_coverage");
		this.GL_NV_multisample_filter_hint = supported_extensions.contains("GL_NV_multisample_filter_hint");
		this.GL_NV_occlusion_query = supported_extensions.contains("GL_NV_occlusion_query");
		this.GL_NV_packed_depth_stencil = supported_extensions.contains("GL_NV_packed_depth_stencil");
		this.GL_NV_parameter_buffer_object = supported_extensions.contains("GL_NV_parameter_buffer_object");
		this.GL_NV_parameter_buffer_object2 = supported_extensions.contains("GL_NV_parameter_buffer_object2");
		this.GL_NV_path_rendering = supported_extensions.contains("GL_NV_path_rendering");
		this.GL_NV_pixel_data_range = supported_extensions.contains("GL_NV_pixel_data_range");
		this.GL_NV_point_sprite = supported_extensions.contains("GL_NV_point_sprite");
		this.GL_NV_present_video = supported_extensions.contains("GL_NV_present_video");
		this.GL_NV_primitive_restart = supported_extensions.contains("GL_NV_primitive_restart");
		this.GL_NV_register_combiners = supported_extensions.contains("GL_NV_register_combiners");
		this.GL_NV_register_combiners2 = supported_extensions.contains("GL_NV_register_combiners2");
		this.GL_NV_shader_atomic_counters = supported_extensions.contains("GL_NV_shader_atomic_counters");
		this.GL_NV_shader_atomic_float = supported_extensions.contains("GL_NV_shader_atomic_float");
		this.GL_NV_shader_buffer_load = supported_extensions.contains("GL_NV_shader_buffer_load");
		this.GL_NV_shader_buffer_store = supported_extensions.contains("GL_NV_shader_buffer_store");
		this.GL_NV_shader_storage_buffer_object = supported_extensions.contains("GL_NV_shader_storage_buffer_object");
		this.GL_NV_tessellation_program5 = supported_extensions.contains("GL_NV_tessellation_program5");
		this.GL_NV_texgen_reflection = supported_extensions.contains("GL_NV_texgen_reflection");
		this.GL_NV_texture_barrier = supported_extensions.contains("GL_NV_texture_barrier");
		this.GL_NV_texture_compression_vtc = supported_extensions.contains("GL_NV_texture_compression_vtc");
		this.GL_NV_texture_env_combine4 = supported_extensions.contains("GL_NV_texture_env_combine4");
		this.GL_NV_texture_expand_normal = supported_extensions.contains("GL_NV_texture_expand_normal");
		this.GL_NV_texture_multisample = supported_extensions.contains("GL_NV_texture_multisample");
		this.GL_NV_texture_rectangle = supported_extensions.contains("GL_NV_texture_rectangle");
		this.GL_NV_texture_shader = supported_extensions.contains("GL_NV_texture_shader");
		this.GL_NV_texture_shader2 = supported_extensions.contains("GL_NV_texture_shader2");
		this.GL_NV_texture_shader3 = supported_extensions.contains("GL_NV_texture_shader3");
		this.GL_NV_transform_feedback = supported_extensions.contains("GL_NV_transform_feedback");
		this.GL_NV_transform_feedback2 = supported_extensions.contains("GL_NV_transform_feedback2");
		this.GL_NV_vertex_array_range = supported_extensions.contains("GL_NV_vertex_array_range");
		this.GL_NV_vertex_array_range2 = supported_extensions.contains("GL_NV_vertex_array_range2");
		this.GL_NV_vertex_attrib_integer_64bit = supported_extensions.contains("GL_NV_vertex_attrib_integer_64bit");
		this.GL_NV_vertex_buffer_unified_memory = supported_extensions.contains("GL_NV_vertex_buffer_unified_memory");
		this.GL_NV_vertex_program = supported_extensions.contains("GL_NV_vertex_program")
			&& supported_extensions.contains("GL_NV_program");
		this.GL_NV_vertex_program1_1 = supported_extensions.contains("GL_NV_vertex_program1_1");
		this.GL_NV_vertex_program2 = supported_extensions.contains("GL_NV_vertex_program2");
		this.GL_NV_vertex_program2_option = supported_extensions.contains("GL_NV_vertex_program2_option");
		this.GL_NV_vertex_program3 = supported_extensions.contains("GL_NV_vertex_program3");
		this.GL_NV_vertex_program4 = supported_extensions.contains("GL_NV_vertex_program4");
		this.GL_NV_video_capture = supported_extensions.contains("GL_NV_video_capture");
		this.GL_SGIS_generate_mipmap = supported_extensions.contains("GL_SGIS_generate_mipmap");
		this.GL_SGIS_texture_lod = supported_extensions.contains("GL_SGIS_texture_lod");
		this.GL_SUN_slice_accum = supported_extensions.contains("GL_SUN_slice_accum");
		tracker.init();
	}
}

redpajama_set_name: RedPajamaGithub