OpenGL® Extension Registry
Many OpenGL extensions, as well as extensions to related APIs like GLU, GLX, and WGL, have been defined by vendors and groups of vendors. The extension registry is maintained by Khronos and contains specifications for all known extensions, written as modifications to the appropriate specification documents. The registry also defines naming conventions, guidelines for creating new extensions and writing suitable extension specifications, and other related documentation.
Table of Contents
- OpenGL Application Binary Interface for Linux
- Extension Header Files
- Enumerant and Function Registry
- Adding to the Registry and Requesting Enumerant Allocations
- Specifications
OpenGL Application Binary Interface for Linux
The current version of the OpenGL Application Binary Interface for Linux is also available.
Extension Header Files
Because extensions vary from platform to platform and driver to driver, OpenGL developers can't expect interfaces for all extensions to be defined in the standard gl.h, glx.h, and wgl.h header files. Additional header files - glext.h, glxext.h, and wglext.h - are provided here.
These headers define interfaces (enumerants, prototypes, and for platforms supporting dynamic runtime extension queries, such as Linux and Microsoft Windows, function pointer typedefs) for all registered extensions.
Enumerant and Function Registry
The Registry includes databases defining the APIs and reserved enumerant ranges for OpenGL, GLX, and WGL. There are several of these ".spec" files for each API, described below:
- OpenGL .spec files
- enum.spec - canonical description of the reserved OpenGL enumerants and the ranges allocated for different purposes. New allocations are made here and when extensions using values in allocated ranges are registered, the enumerants in those extensions are added as well.
- enumext.spec - derived variant of enum.spec containing the enumerant values grouped by the extension or API core revision they correspond to.
- gl.spec - canonical description of the functions defined by core OpenGL and extensions. When extensions are registered, the functions they define are added here.
- gl.tm - typemap used to convert the abstract typenames in gl.spec into underlying GL types.
- enumext.spec, gl.spec, and gl.tm are used to generate glext.h
- GLX .spec files
- glxenum.spec - canonical description of the reserved GLX enumerants, like enum.spec.
- glxenumext.spec - derived variant of glxenum.spec containing the enumerant values grouped by the GLX extension or API core revision they correspond to. This only includes GLX core versions 1.3 and later.
- glx.spec - canonical description of the functions defined by core GLX up to version 1.3.
- glxext.spec - canonical description of the functions defined by GLX extensions and core versions 1.3 and later.
- glx.tm - typemap used to convert the abstract typenames in glx*.spec into underlying GLX types.
- glxenumext.spec, glxext.spec, and glx.tm are used to generate glxext.h.
- WGL .spec files
- wglenum.spec - canonical description of the reserved WGL enumerants, like enum.spec.
- wglenumext.spec - derived variant of wglenum.spec containing the enumerant values grouped by the WGL extension they correspond to. This only includes WGL core versions 1.3 and later (Microsoft has never revised the WGL core API).
- wgl.spec - canonical description of the functions defined by WGL.
- wglext.spec - canonical description of the functions defined by WGL extensions.
- wgl.tm - typemap used to convert the abstract typenames in wgl*.spec into underlying WGL and Win32 types.
- wglenumext.spec, wglext.spec, and wgl.tm are used to generate wglext.h.
(Yes, these databases should be moved to a modern XML-based format. Patience.)
Adding to the Registry and Requesting Enumerant Allocations
If you want to add an extension specification to the Registry, correct an existing specification, request allocation of enumerants and other controlled resources in the OpenGL / GLX / WGL namespaces, or otherwise change the Registry, please create a Bugzilla account on the public Khronos.org Bugzilla, and submit your request there against Product "OpenGL", Component "Registry". You can use this Bugzilla link, which fills in many fields for you.
Please review the documents below, especially How to Create Extensions and Enumerant Allocation Policies, before making your request.
API Specifications and Other Documents
- OpenGL 3.0 Specification (updated September 23, 2008)
- OpenGL 3.0 Specification with changes marked (August 11, 2008)
- OpenGL 2.1 Specification (December 1, 2006)
- OpenGL Shading Language Specification (version 1.30.08, August 7, 2008)
- OpenGL Shading Language Specification with changes marked (version 1.30.08, August 7, 2008)
- OpenGL Shading Language Specification (version 1.20.8, September 7, 2006)
- OpenGL Shading Language Specification (version 1.10.59, April 30, 2004)
- How to Create Extensions
- Enumerant Allocation Policies
- Extension Template
- Extension Promotion Guidelines
- Enumerant/Opcode Registry
- OpenGL Syntax Rules (updated 2006/12/13)
- OpenGL Shading Language Extension Conventions (updated 2006/12/18)
- Extension Specification Example
ARB Extensions by number
- GL_ARB_multitexture
- GLX_ARB_get_proc_address
- GL_ARB_transpose_matrix
- WGL_ARB_buffer_region
- GL_ARB_multisample
GLX_ARB_multisample
WGL_ARB_multisample - GL_ARB_texture_env_add
- GL_ARB_texture_cube_map
- WGL_ARB_extensions_string
- WGL_ARB_pixel_format
- WGL_ARB_make_current_read
- WGL_ARB_pbuffer
- GL_ARB_texture_compression
- GL_ARB_texture_border_clamp
- GL_ARB_point_parameters
- GL_ARB_vertex_blend
- GL_ARB_matrix_palette
- GL_ARB_texture_env_combine
- GL_ARB_texture_env_crossbar
- GL_ARB_texture_env_dot3
- WGL_ARB_render_texture
- GL_ARB_texture_mirrored_repeat
- GL_ARB_depth_texture
- GL_ARB_shadow
- GL_ARB_shadow_ambient
- GL_ARB_window_pos
- GL_ARB_vertex_program
- GL_ARB_fragment_program
- GL_ARB_vertex_buffer_object
- GL_ARB_occlusion_query
- GL_ARB_shader_objects
- GL_ARB_vertex_shader
- GL_ARB_fragment_shader
- GL_ARB_shading_language_100
- GL_ARB_texture_non_power_of_two
- GL_ARB_point_sprite
- GL_ARB_fragment_program_shadow
- GL_ARB_draw_buffers
- GL_ARB_texture_rectangle
- GL_ARB_color_buffer_float
WGL_ARB_pixel_format_float
GLX_ARB_fbconfig_float - GL_ARB_half_float_pixel
- GL_ARB_texture_float
- GL_ARB_pixel_buffer_object
- GL_ARB_depth_buffer_float
- GL_ARB_draw_instanced
- GL_ARB_framebuffer_object
- GL_ARB_framebuffer_sRGB
GLX_ARB_framebuffer_sRGB
WGL_ARB_framebuffer_sRGB - GL_ARB_geometry_shader4
- GL_ARB_half_float_vertex
- GL_ARB_instanced_arrays
- GL_ARB_map_buffer_range
- GL_ARB_texture_buffer_object
- GL_ARB_texture_compression_rgtc
- GL_ARB_texture_rg
- GL_ARB_vertex_array_object
- WGL_ARB_create_context
- GLX_ARB_create_context
Vendor and EXT Extensions by number
- GL_EXT_abgr
- GL_EXT_blend_color
- GL_EXT_polygon_offset
- GL_EXT_texture
- GL_EXT_texture3D
- GL_SGIS_texture_filter4
- GL_EXT_subtexture
- GL_EXT_copy_texture
- GL_EXT_histogram
- GL_EXT_convolution
- GL_SGI_color_matrix
- GL_SGI_color_table
- GL_SGIS_pixel_texture
- GL_SGIX_pixel_texture
- GL_SGIS_texture4D
- GL_SGI_texture_color_table
- GL_EXT_cmyka
- GL_EXT_texture_object
- GL_SGIS_detail_texture
- GL_SGIS_sharpen_texture
- GL_EXT_packed_pixels
- GL_SGIS_texture_lod
- GL_SGIS_multisample
GLX_SGIS_multisample - GL_EXT_rescale_normal
- GLX_EXT_visual_info
- GL_EXT_vertex_array
- GL_EXT_misc_attribute
- GL_SGIS_generate_mipmap
- GL_SGIX_clipmap
- GL_SGIX_shadow
- GL_SGIS_texture_edge_clamp
- GL_SGIS_texture_border_clamp
- GL_EXT_blend_minmax
- GL_EXT_blend_subtract
- GL_EXT_blend_logic_op
- GLX_SGI_swap_control
- GLX_SGI_video_sync
- GLX_SGI_make_current_read
- GLX_SGIX_video_source
- GLX_EXT_visual_rating
- GL_SGIX_interlace
- GLX_EXT_import_context
- GLX_SGIX_fbconfig
- GLX_SGIX_pbuffer
- GL_SGIS_texture_select
- GL_SGIX_sprite
- GL_SGIX_texture_multi_buffer
- GL_EXT_point_parameters
- GL_SGIX_instruments
- GL_SGIX_texture_scale_bias
- GL_SGIX_framezoom
- GL_SGIX_tag_sample_buffer
- GL_SGIX_reference_plane
- GL_SGIX_flush_raster
- GLX_SGI_cushion
- GL_SGIX_depth_texture
- GL_SGIS_fog_function
- GL_SGIX_fog_offset
- GL_HP_image_transform
- GL_HP_convolution_border_modes
- GL_SGIX_texture_add_env
- GL_EXT_color_subtable
- GLU_EXT_object_space_tess
- GL_PGI_vertex_hints
- GL_PGI_misc_hints
- GL_EXT_paletted_texture
- GL_EXT_clip_volume_hint
- GL_SGIX_list_priority
- GL_SGIX_ir_instrument1
- GLX_SGIX_video_resize
- GL_SGIX_texture_lod_bias
- GLU_SGI_filter4_parameters
- GLX_SGIX_dm_buffer
- GL_SGIX_shadow_ambient
- GLX_SGIX_swap_group
- GLX_SGIX_swap_barrier
- GL_EXT_index_texture
- GL_EXT_index_material
- GL_EXT_index_func
- GL_EXT_index_array_formats
- GL_EXT_compiled_vertex_array
- GL_EXT_cull_vertex
- GLU_EXT_nurbs_tessellator
- GL_SGIX_ycrcb
- GL_EXT_fragment_lighting
- GL_IBM_rasterpos_clip
- GL_HP_texture_lighting
- GL_EXT_draw_range_elements
- GL_WIN_phong_shading
- GL_WIN_specular_fog
- GLX_SGIS_color_range
GL_SGIS_color_range - GL_EXT_light_texture
- GL_SGIX_blend_alpha_minmax
- GL_EXT_scene_marker
GLX_EXT_scene_marker - GL_SGIX_pixel_texture_bits
- GL_EXT_bgra
- GL_SGIX_async
- GL_SGIX_async_pixel
- GL_SGIX_async_histogram
- GL_INTEL_texture_scissor
- GL_INTEL_parallel_arrays
- GL_HP_occlusion_test
- GL_EXT_pixel_transform
- GL_EXT_pixel_transform_color_table
- GL_EXT_shared_texture_palette
- GLX_SGIS_blended_overlay
- GL_EXT_separate_specular_color
- GL_EXT_secondary_color
- GL_EXT_texture_env
- GL_EXT_texture_perturb_normal
- GL_EXT_multi_draw_arrays
GL_SUN_multi_draw_arrays - GL_EXT_fog_coord
- GL_REND_screen_coordinates
- GL_EXT_coordinate_frame
- GL_EXT_texture_env_combine
- GL_APPLE_specular_vector
- GL_APPLE_transform_hint
- GL_SUNX_constant_data
- GL_SUN_global_alpha
- GL_SUN_triangle_list
- GL_SUN_vertex
- WGL_EXT_display_color_table
- WGL_EXT_extensions_string
- WGL_EXT_make_current_read
- WGL_EXT_pixel_format
- WGL_EXT_pbuffer
- WGL_EXT_swap_control
- GL_EXT_blend_func_separate
- GL_INGR_color_clamp
- GL_INGR_interlace_read
- GL_EXT_stencil_wrap
- WGL_EXT_depth_float
- GL_EXT_422_pixels
- GL_NV_texgen_reflection
- GL_SGIX_texture_range
- GL_SUN_convolution_border_modes
- GLX_SUN_get_transparent_index
- GL_EXT_texture_env_add
- GL_EXT_texture_lod_bias
- GL_EXT_texture_filter_anisotropic
- GL_EXT_vertex_weighting
- GL_NV_light_max_exponent
- GL_NV_vertex_array_range
- GL_NV_register_combiners
- GL_NV_fog_distance
- GL_NV_texgen_emboss
- GL_NV_blend_square
- GL_NV_texture_env_combine4
- GL_MESA_resize_buffers
- GL_MESA_window_pos
- GL_EXT_texture_compression_s3tc
- GL_IBM_cull_vertex
- GL_IBM_multimode_draw_arrays
- GL_IBM_vertex_array_lists
- GL_3DFX_texture_compression_FXT1
- GL_3DFX_multisample
- GL_3DFX_tbuffer
- WGL_EXT_multisample
GL_EXT_multisample - GL_SGIX_vertex_preclip
GL_SGIX_vertex_preclip_hint - GL_SGIX_convolution_accuracy
- GL_SGIX_resample
- GL_SGIS_point_line_texgen
- GL_SGIS_texture_color_mask
- GLX_MESA_copy_sub_buffer
- GLX_MESA_pixmap_colormap
- GLX_MESA_release_buffers
- GLX_MESA_set_3dfx_mode
- GL_EXT_texture_env_dot3
- GL_ATI_texture_mirror_once
- GL_NV_fence
- GL_IBM_static_data
- GL_IBM_texture_mirrored_repeat
- GL_NV_evaluators
- GL_NV_packed_depth_stencil
- GL_NV_register_combiners2
- GL_NV_texture_compression_vtc
- GL_NV_texture_rectangle
- GL_NV_texture_shader
- GL_NV_texture_shader2
- GL_NV_vertex_array_range2
- GL_NV_vertex_program
- GLX_SGIX_visual_select_group
- GL_SGIX_texture_coordinate_clamp
- GLX_OML_swap_method
- GLX_OML_sync_control
- GL_OML_interlace
- GL_OML_subsample
- GL_OML_resample
- WGL_OML_sync_control
- GL_NV_copy_depth_to_color
- GL_ATI_envmap_bumpmap
- GL_ATI_fragment_shader
- GL_ATI_pn_triangles
- GL_ATI_vertex_array_object
- GL_EXT_vertex_shader
- GL_ATI_vertex_streams
- WGL_I3D_digital_video_control
- WGL_I3D_gamma
- WGL_I3D_genlock
- WGL_I3D_image_buffer
- WGL_I3D_swap_frame_lock
- WGL_I3D_swap_frame_usage
- GL_ATI_element_array
- GL_SUN_mesh_array
- GL_SUN_slice_accum
- GL_NV_multisample_filter_hint
- GL_NV_depth_clamp
- GL_NV_occlusion_query
- GL_NV_point_sprite
- WGL_NV_render_depth_texture
- WGL_NV_render_texture_rectangle
- GL_NV_texture_shader3
- GL_NV_vertex_program1_1
- GL_EXT_shadow_funcs
- GL_EXT_stencil_two_side
- GL_ATI_text_fragment_shader
- GL_APPLE_client_storage
- GL_APPLE_element_array
- GL_APPLE_fence
- GL_APPLE_vertex_array_object
- GL_APPLE_vertex_array_range
- GL_APPLE_ycbcr_422
- GL_S3_s3tc
- GL_ATI_draw_buffers
- WGL_ATI_pixel_format_float
- GL_ATI_texture_env_combine3
- GL_ATI_texture_float
- GL_NV_float_buffer
WGL_NV_float_buffer - GL_NV_fragment_program
- GL_NV_half_float
- GL_NV_pixel_data_range
- GL_NV_primitive_restart
- GL_NV_texture_expand_normal
- GL_NV_vertex_program2
- GL_ATI_map_object_buffer
- GL_ATI_separate_stencil
- GL_ATI_vertex_attrib_array_object
- GL_OES_byte_coordinates
- GL_OES_fixed_point
- GL_OES_single_precision
- GL_OES_compressed_paletted_texture
- GL_OES_read_format
- GL_OES_query_matrix
- GL_EXT_depth_bounds_test
- GL_EXT_texture_mirror_clamp
- GL_EXT_blend_equation_separate
- GL_MESA_pack_invert
- GL_MESA_ycbcr_texture
- GL_EXT_pixel_buffer_object
- GL_NV_fragment_program_option
- GL_NV_fragment_program2
- GL_NV_vertex_program2_option
- GL_NV_vertex_program3
- GLX_SGIX_hyperpipe
- GLX_MESA_agp_offset
- GL_EXT_texture_compression_dxt1
- GL_EXT_framebuffer_object
- GL_GREMEDY_string_marker
- GL_EXT_packed_depth_stencil
- WGL_3DL_stereo_control
- GL_EXT_stencil_clear_tag
- GL_EXT_texture_sRGB
- GL_EXT_framebuffer_blit
- GL_EXT_framebuffer_multisample
- GL_MESAX_texture_stack
- GL_EXT_timer_query
- GL_EXT_gpu_program_parameters
- GL_APPLE_flush_buffer_range
- GL_NV_gpu_program4
- GL_NV_geometry_program4
- GL_EXT_geometry_shader4
- GL_NV_vertex_program4
- GL_EXT_gpu_shader4
- GL_EXT_draw_instanced
- GL_EXT_packed_float
WGL_EXT_pixel_format_packed_float
GLX_EXT_fbconfig_packed_float - GL_EXT_texture_array
- GL_EXT_texture_buffer_object
- GL_EXT_texture_compression_latc
- GL_EXT_texture_compression_rgtc
- GL_EXT_texture_shared_exponent
- GL_NV_depth_buffer_float
- GL_NV_fragment_program4
- GL_NV_framebuffer_multisample_coverage
- GL_EXT_framebuffer_sRGB
GLX_EXT_framebuffer_sRGB
WGL_EXT_framebuffer_sRGB - GL_NV_geometry_shader4
- GL_NV_parameter_buffer_object
- GL_EXT_draw_buffers2
- GL_NV_transform_feedback
- GL_EXT_bindable_uniform
- GL_EXT_texture_integer
- GLX_EXT_texture_from_pixmap
- GL_GREMEDY_frame_terminator
- GL_NV_conditional_render
- GL_NV_present_video
- GLX_NV_video_out
- WGL_NV_video_out
- GLX_NV_swap_group
- WGL_NV_swap_group
- GL_EXT_transform_feedback
- GL_EXT_direct_state_access
- GL_EXT_vertex_array_bgra
- WGL_NV_gpu_affinity
- GL_EXT_texture_swizzle
- GL_NV_explicit_multisample
- GL_NV_transform_feedback2
Other Extensions
These extensions have not yet been assigned numbers, are still under development, or were abandoned (but are kept in the extension registry for reference purposes).
