irrlicht/source/Irrlicht/COpenGLExtensionHandler.h

794 lines
24 KiB
C
Raw Normal View History

// Copyright (C) 2002-2007 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in Irrlicht.h
#ifndef __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
#define __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
#include "EDriverFeatures.h"
#include "irrTypes.h"
#if defined(_IRR_WINDOWS_API_)
// include windows headers for HWND
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "glext.h"
#ifdef _MSC_VER
#pragma comment(lib, "OpenGL32.lib")
#pragma comment(lib, "GLu32.lib")
#endif
#elif defined(MACOSX)
#define GL_EXT_texture_env_combine 1
#include "CIrrDeviceMacOSX.h"
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <OpenGL/glext.h>
#elif defined(_IRR_USE_SDL_DEVICE_)
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
#define GL_GLEXT_LEGACY 1
#define GLX_GLXEXT_LEGACY 1
#else
#define GL_GLEXT_PROTOTYPES 1
#define GLX_GLXEXT_PROTOTYPES 1
#endif
#include <SDL/SDL_opengl.h>
#define NO_SDL_GLEXT
#include "glext.h"
#else
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
#define GL_GLEXT_LEGACY 1
#define GLX_GLXEXT_LEGACY 1
#else
#define GL_GLEXT_PROTOTYPES 1
#define GLX_GLXEXT_PROTOTYPES 1
#endif
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glx.h>
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
#include "glext.h"
#undef GLX_ARB_get_proc_address // avoid problems with local glxext.h
#include "glxext.h"
#endif
#endif
namespace irr
{
namespace video
{
static const char* const OpenGLFeatureStrings[] = {
"GL_3DFX_multisample",
"GL_3DFX_tbuffer",
"GL_3DFX_texture_compression_FXT1",
"GL_APPLE_client_storage",
"GL_APPLE_element_array",
"GL_APPLE_fence",
"GL_APPLE_flush_buffer_range",
"GL_APPLE_specular_vector",
"GL_APPLE_transform_hint",
"GL_APPLE_vertex_array_object",
"GL_APPLE_vertex_array_range",
"GL_APPLE_ycbcr_422",
"GL_ARB_color_buffer_float",
"GL_ARB_depth_texture",
"GL_ARB_draw_buffers",
"GL_ARB_fragment_program",
"GL_ARB_fragment_program_shadow",
"GL_ARB_fragment_shader",
"GL_ARB_half_float_pixel",
"GL_ARB_imaging",
"GL_ARB_matrix_palette",
"GL_ARB_multisample",
"GL_ARB_multitexture",
"GL_ARB_occlusion_query",
"GL_ARB_pixel_buffer_object",
"GL_ARB_point_parameters",
"GL_ARB_point_sprite",
"GL_ARB_shader_objects",
"GL_ARB_shading_language_100",
"GL_ARB_shadow",
"GL_ARB_shadow_ambient",
"GL_ARB_texture_border_clamp",
"GL_ARB_texture_compression",
"GL_ARB_texture_cube_map",
"GL_ARB_texture_env_add",
"GL_ARB_texture_env_combine",
"GL_ARB_texture_env_crossbar",
"GL_ARB_texture_env_dot3",
"GL_ARB_texture_float",
"GL_ARB_texture_mirrored_repeat",
"GL_ARB_texture_non_power_of_two",
"GL_ARB_texture_rectangle",
"GL_ARB_transpose_matrix",
"GL_ARB_vertex_blend",
"GL_ARB_vertex_buffer_object",
"GL_ARB_vertex_program",
"GL_ARB_vertex_shader",
"GL_ARB_window_pos",
"GL_ATI_draw_buffers",
"GL_ATI_element_array",
"GL_ATI_envmap_bumpmap",
"GL_ATI_fragment_shader",
"GL_ATI_map_object_buffer",
"GL_ATI_pixel_format_float",
"GL_ATI_pn_triangles",
"GL_ATI_separate_stencil",
"GL_ATI_text_fragment_shader",
"GL_ATI_texture_env_combine3",
"GL_ATI_texture_float",
"GL_ATI_texture_mirror_once",
"GL_ATI_vertex_array_object",
"GL_ATI_vertex_attrib_array_object",
"GL_ATI_vertex_streams",
"GL_EXT_422_pixels",
"GL_EXT_abgr",
"GL_EXT_bgra",
"GL_EXT_bindable_uniform",
"GL_EXT_blend_color",
"GL_EXT_blend_equation_separate",
"GL_EXT_blend_func_separate",
"GL_EXT_blend_logic_op",
"GL_EXT_blend_minmax",
"GL_EXT_blend_subtract",
"GL_EXT_clip_volume_hint",
"GL_EXT_cmyka",
"GL_EXT_color_subtable",
"GL_EXT_compiled_vertex_array",
"GL_EXT_convolution",
"GL_EXT_coordinate_frame",
"GL_EXT_copy_texture",
"GL_EXT_cull_vertex",
"GL_EXT_depth_bounds_test",
"GL_EXT_draw_buffers2",
"GL_EXT_draw_instanced",
"GL_EXT_draw_range_elements",
"GL_EXT_fog_coord",
"GL_EXT_framebuffer_blit",
"GL_EXT_framebuffer_multisample",
"GL_EXT_framebuffer_object",
"GL_EXT_framebuffer_sRGB",
"GL_EXT_geometry_shader4",
"GL_EXT_gpu_program_parameters",
"GL_EXT_gpu_shader4",
"GL_EXT_histogram",
"GL_EXT_index_array_formats",
"GL_EXT_index_func",
"GL_EXT_index_material",
"GL_EXT_index_texture",
"GL_EXT_light_texture",
"GL_EXT_misc_attribute",
"GL_EXT_multi_draw_arrays",
"GL_EXT_multisample",
"GL_EXT_packed_depth_stencil",
"GL_EXT_packed_float",
"GL_EXT_packed_pixels",
"GL_EXT_paletted_texture",
"GL_EXT_pixel_buffer_object",
"GL_EXT_pixel_transform",
"GL_EXT_pixel_transform_color_table",
"GL_EXT_point_parameters",
"GL_EXT_polygon_offset",
"GL_EXT_rescale_normal",
"GL_EXT_secondary_color",
"GL_EXT_separate_specular_color",
"GL_EXT_shadow_funcs",
"GL_EXT_shared_texture_palette",
"GL_EXT_stencil_clear_tag",
"GL_EXT_stencil_two_side",
"GL_EXT_stencil_wrap",
"GL_EXT_subtexture",
"GL_EXT_texture",
"GL_EXT_texture3D",
"GL_EXT_texture_array",
"GL_EXT_texture_buffer_object",
"GL_EXT_texture_compression_latc",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc",
"GL_EXT_texture_cube_map",
"GL_EXT_texture_env_add",
"GL_EXT_texture_env_combine",
"GL_EXT_texture_env_dot3",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_integer",
"GL_EXT_texture_lod_bias",
"GL_EXT_texture_mirror_clamp",
"GL_EXT_texture_object",
"GL_EXT_texture_perturb_normal",
"GL_EXT_texture_shared_exponent",
"GL_EXT_texture_sRGB",
"GL_EXT_timer_query",
"GL_EXT_vertex_array",
"GL_EXT_vertex_shader",
"GL_EXT_vertex_weighting",
"GL_FfdMaskSGIX",
"GL_GREMEDY_string_marker",
"GL_HP_convolution_border_modes",
"GL_HP_image_transform",
"GL_HP_occlusion_test",
"GL_HP_texture_lighting",
"GL_IBM_cull_vertex",
"GL_IBM_multimode_draw_arrays",
"GL_IBM_rasterpos_clip",
"GL_IBM_texture_mirrored_repeat",
"GL_IBM_vertex_array_lists",
"GL_INGR_blend_func_separate",
"GL_INGR_color_clamp",
"GL_INGR_interlace_read",
"GL_INGR_palette_buffer",
"GL_INTEL_parallel_arrays",
"GL_INTEL_texture_scissor",
"GL_MESA_pack_invert",
"GL_MESA_resize_buffers",
"GL_MESA_window_pos",
"GL_MESAX_texture_stack",
"GL_MESA_ycbcr_texture",
"GL_NV_blend_square",
"GL_NV_copy_depth_to_color",
"GL_NV_depth_buffer_float",
"GL_NV_depth_clamp",
"GL_NV_evaluators",
"GL_NV_fence",
"GL_NV_float_buffer",
"GL_NV_fog_distance",
"GL_NV_fragment_program",
"GL_NV_fragment_program2",
"GL_NV_fragment_program4",
"GL_NV_fragment_program_option",
"GL_NV_framebuffer_multisample_coverage",
"GL_NV_geometry_program4",
"GL_NV_geometry_shader4",
"GL_NV_gpu_program4",
"GL_NV_half_float",
"GL_NV_light_max_exponent",
"GL_NV_multisample_filter_hint",
"GL_NV_occlusion_query",
"GL_NV_packed_depth_stencil",
"GL_NV_parameter_buffer_object",
"GL_NV_pixel_data_range",
"GL_NV_point_sprite",
"GL_NV_primitive_restart",
"GL_NV_register_combiners",
"GL_NV_register_combiners2",
"GL_NV_texgen_emboss",
"GL_NV_texgen_reflection",
"GL_NV_texture_compression_vtc",
"GL_NV_texture_env_combine4",
"GL_NV_texture_expand_normal",
"GL_NV_texture_rectangle",
"GL_NV_texture_shader",
"GL_NV_texture_shader2",
"GL_NV_texture_shader3",
"GL_NV_transform_feedback",
"GL_NV_vertex_array_range",
"GL_NV_vertex_array_range2",
"GL_NV_vertex_program",
"GL_NV_vertex_program1_1",
"GL_NV_vertex_program2",
"GL_NV_vertex_program2_option",
"GL_NV_vertex_program3",
"GL_NV_vertex_program4",
"GL_OES_read_format",
"GL_OML_interlace",
"GL_OML_resample",
"GL_OML_subsample",
"GL_PGI_misc_hints",
"GL_PGI_vertex_hints",
"GL_REND_screen_coordinates",
"GL_S3_s3tc",
"GL_SGI_color_matrix",
"GL_SGI_color_table",
"GL_SGI_depth_pass_instrument",
"GL_SGIS_detail_texture",
"GL_SGIS_fog_function",
"GL_SGIS_generate_mipmap",
"GL_SGIS_multisample",
"GL_SGIS_pixel_texture",
"GL_SGIS_point_line_texgen",
"GL_SGIS_point_parameters",
"GL_SGIS_sharpen_texture",
"GL_SGIS_texture4D",
"GL_SGIS_texture_border_clamp",
"GL_SGIS_texture_color_mask",
"GL_SGIS_texture_edge_clamp",
"GL_SGIS_texture_filter4",
"GL_SGIS_texture_lod",
"GL_SGIS_texture_select",
"GL_SGI_texture_color_table",
"GL_SGIX_async",
"GL_SGIX_async_histogram",
"GL_SGIX_async_pixel",
"GL_SGIX_blend_alpha_minmax",
"GL_SGIX_calligraphic_fragment",
"GL_SGIX_clipmap",
"GL_SGIX_convolution_accuracy",
"GL_SGIX_depth_pass_instrument",
"GL_SGIX_depth_texture",
"GL_SGIX_flush_raster",
"GL_SGIX_fog_offset",
"GL_SGIX_fog_scale",
"GL_SGIX_fragment_lighting",
"GL_SGIX_framezoom",
"GL_SGIX_igloo_interface",
"GL_SGIX_impact_pixel_texture",
"GL_SGIX_instruments",
"GL_SGIX_interlace",
"GL_SGIX_ir_instrument1",
"GL_SGIX_list_priority",
"GL_SGIX_pixel_texture",
"GL_SGIX_pixel_tiles",
"GL_SGIX_polynomial_ffd",
"GL_SGIX_reference_plane",
"GL_SGIX_resample",
"GL_SGIX_scalebias_hint",
"GL_SGIX_shadow",
"GL_SGIX_shadow_ambient",
"GL_SGIX_sprite",
"GL_SGIX_subsample",
"GL_SGIX_tag_sample_buffer",
"GL_SGIX_texture_add_env",
"GL_SGIX_texture_coordinate_clamp",
"GL_SGIX_texture_lod_bias",
"GL_SGIX_texture_multi_buffer",
"GL_SGIX_texture_scale_bias",
"GL_SGIX_texture_select",
"GL_SGIX_vertex_preclip",
"GL_SGIX_ycrcb",
"GL_SGIX_ycrcba",
"GL_SGIX_ycrcb_subsample",
"GL_SUN_convolution_border_modes",
"GL_SUN_global_alpha",
"GL_SUN_mesh_array",
"GL_SUN_slice_accum",
"GL_SUN_triangle_list",
"GL_SUN_vertex",
"GL_SUNX_constant_data",
"GL_WIN_phong_shading",
"GL_WIN_specular_fog"
};
class COpenGLExtensionHandler
{
enum EOpenGLFeatures {
IRR_3DFX_multisample = 0,
IRR_3DFX_tbuffer,
IRR_3DFX_texture_compression_FXT1,
IRR_APPLE_client_storage,
IRR_APPLE_element_array,
IRR_APPLE_fence,
IRR_APPLE_flush_buffer_range,
IRR_APPLE_specular_vector,
IRR_APPLE_transform_hint,
IRR_APPLE_vertex_array_object,
IRR_APPLE_vertex_array_range,
IRR_APPLE_ycbcr_422,
IRR_ARB_color_buffer_float,
IRR_ARB_depth_texture,
IRR_ARB_draw_buffers,
IRR_ARB_fragment_program,
IRR_ARB_fragment_program_shadow,
IRR_ARB_fragment_shader,
IRR_ARB_half_float_pixel,
IRR_ARB_imaging,
IRR_ARB_matrix_palette,
IRR_ARB_multisample,
IRR_ARB_multitexture,
IRR_ARB_occlusion_query,
IRR_ARB_pixel_buffer_object,
IRR_ARB_point_parameters,
IRR_ARB_point_sprite,
IRR_ARB_shader_objects,
IRR_ARB_shading_language_100,
IRR_ARB_shadow,
IRR_ARB_shadow_ambient,
IRR_ARB_texture_border_clamp,
IRR_ARB_texture_compression,
IRR_ARB_texture_cube_map,
IRR_ARB_texture_env_add,
IRR_ARB_texture_env_combine,
IRR_ARB_texture_env_crossbar,
IRR_ARB_texture_env_dot3,
IRR_ARB_texture_float,
IRR_ARB_texture_mirrored_repeat,
IRR_ARB_texture_non_power_of_two,
IRR_ARB_texture_rectangle,
IRR_ARB_transpose_matrix,
IRR_ARB_vertex_blend,
IRR_ARB_vertex_buffer_object,
IRR_ARB_vertex_program,
IRR_ARB_vertex_shader,
IRR_ARB_window_pos,
IRR_ATI_draw_buffers,
IRR_ATI_element_array,
IRR_ATI_envmap_bumpmap,
IRR_ATI_fragment_shader,
IRR_ATI_map_object_buffer,
IRR_ATI_pixel_format_float,
IRR_ATI_pn_triangles,
IRR_ATI_separate_stencil,
IRR_ATI_text_fragment_shader,
IRR_ATI_texture_env_combine3,
IRR_ATI_texture_float,
IRR_ATI_texture_mirror_once,
IRR_ATI_vertex_array_object,
IRR_ATI_vertex_attrib_array_object,
IRR_ATI_vertex_streams,
IRR_EXT_422_pixels,
IRR_EXT_abgr,
IRR_EXT_bgra,
IRR_EXT_bindable_uniform,
IRR_EXT_blend_color,
IRR_EXT_blend_equation_separate,
IRR_EXT_blend_func_separate,
IRR_EXT_blend_logic_op,
IRR_EXT_blend_minmax,
IRR_EXT_blend_subtract,
IRR_EXT_clip_volume_hint,
IRR_EXT_cmyka,
IRR_EXT_color_subtable,
IRR_EXT_compiled_vertex_array,
IRR_EXT_convolution,
IRR_EXT_coordinate_frame,
IRR_EXT_copy_texture,
IRR_EXT_cull_vertex,
IRR_EXT_depth_bounds_test,
IRR_EXT_draw_buffers2,
IRR_EXT_draw_instanced,
IRR_EXT_draw_range_elements,
IRR_EXT_fog_coord,
IRR_EXT_framebuffer_blit,
IRR_EXT_framebuffer_multisample,
IRR_EXT_framebuffer_object,
IRR_EXT_framebuffer_sRGB,
IRR_EXT_geometry_shader4,
IRR_EXT_gpu_program_parameters,
IRR_EXT_gpu_shader4,
IRR_EXT_histogram,
IRR_EXT_index_array_formats,
IRR_EXT_index_func,
IRR_EXT_index_material,
IRR_EXT_index_texture,
IRR_EXT_light_texture,
IRR_EXT_misc_attribute,
IRR_EXT_multi_draw_arrays,
IRR_EXT_multisample,
IRR_EXT_packed_depth_stencil,
IRR_EXT_packed_float,
IRR_EXT_packed_pixels,
IRR_EXT_paletted_texture,
IRR_EXT_pixel_buffer_object,
IRR_EXT_pixel_transform,
IRR_EXT_pixel_transform_color_table,
IRR_EXT_point_parameters,
IRR_EXT_polygon_offset,
IRR_EXT_rescale_normal,
IRR_EXT_secondary_color,
IRR_EXT_separate_specular_color,
IRR_EXT_shadow_funcs,
IRR_EXT_shared_texture_palette,
IRR_EXT_stencil_clear_tag,
IRR_EXT_stencil_two_side,
IRR_EXT_stencil_wrap,
IRR_EXT_subtexture,
IRR_EXT_texture,
IRR_EXT_texture3D,
IRR_EXT_texture_array,
IRR_EXT_texture_buffer_object,
IRR_EXT_texture_compression_latc,
IRR_EXT_texture_compression_rgtc,
IRR_EXT_texture_compression_s3tc,
IRR_EXT_texture_cube_map,
IRR_EXT_texture_env_add,
IRR_EXT_texture_env_combine,
IRR_EXT_texture_env_dot3,
IRR_EXT_texture_filter_anisotropic,
IRR_EXT_texture_integer,
IRR_EXT_texture_lod_bias,
IRR_EXT_texture_mirror_clamp,
IRR_EXT_texture_object,
IRR_EXT_texture_perturb_normal,
IRR_EXT_texture_shared_exponent,
IRR_EXT_texture_sRGB,
IRR_EXT_timer_query,
IRR_EXT_vertex_array,
IRR_EXT_vertex_shader,
IRR_EXT_vertex_weighting,
IRR_FfdMaskSGIX,
IRR_GREMEDY_string_marker,
IRR_HP_convolution_border_modes,
IRR_HP_image_transform,
IRR_HP_occlusion_test,
IRR_HP_texture_lighting,
IRR_IBM_cull_vertex,
IRR_IBM_multimode_draw_arrays,
IRR_IBM_rasterpos_clip,
IRR_IBM_texture_mirrored_repeat,
IRR_IBM_vertex_array_lists,
IRR_INGR_blend_func_separate,
IRR_INGR_color_clamp,
IRR_INGR_interlace_read,
IRR_INGR_palette_buffer,
IRR_INTEL_parallel_arrays,
IRR_INTEL_texture_scissor,
IRR_MESA_pack_invert,
IRR_MESA_resize_buffers,
IRR_MESA_window_pos,
IRR_MESAX_texture_stack,
IRR_MESA_ycbcr_texture,
IRR_NV_blend_square,
IRR_NV_copy_depth_to_color,
IRR_NV_depth_buffer_float,
IRR_NV_depth_clamp,
IRR_NV_evaluators,
IRR_NV_fence,
IRR_NV_float_buffer,
IRR_NV_fog_distance,
IRR_NV_fragment_program,
IRR_NV_fragment_program2,
IRR_NV_fragment_program4,
IRR_NV_fragment_program_option,
IRR_NV_framebuffer_multisample_coverage,
IRR_NV_geometry_program4,
IRR_NV_geometry_shader4,
IRR_NV_gpu_program4,
IRR_NV_half_float,
IRR_NV_light_max_exponent,
IRR_NV_multisample_filter_hint,
IRR_NV_occlusion_query,
IRR_NV_packed_depth_stencil,
IRR_NV_parameter_buffer_object,
IRR_NV_pixel_data_range,
IRR_NV_point_sprite,
IRR_NV_primitive_restart,
IRR_NV_register_combiners,
IRR_NV_register_combiners2,
IRR_NV_texgen_emboss,
IRR_NV_texgen_reflection,
IRR_NV_texture_compression_vtc,
IRR_NV_texture_env_combine4,
IRR_NV_texture_expand_normal,
IRR_NV_texture_rectangle,
IRR_NV_texture_shader,
IRR_NV_texture_shader2,
IRR_NV_texture_shader3,
IRR_NV_transform_feedback,
IRR_NV_vertex_array_range,
IRR_NV_vertex_array_range2,
IRR_NV_vertex_program,
IRR_NV_vertex_program1_1,
IRR_NV_vertex_program2,
IRR_NV_vertex_program2_option,
IRR_NV_vertex_program3,
IRR_NV_vertex_program4,
IRR_OES_read_format,
IRR_OML_interlace,
IRR_OML_resample,
IRR_OML_subsample,
IRR_PGI_misc_hints,
IRR_PGI_vertex_hints,
IRR_REND_screen_coordinates,
IRR_S3_s3tc,
IRR_SGI_color_matrix,
IRR_SGI_color_table,
IRR_SGI_depth_pass_instrument,
IRR_SGIS_detail_texture,
IRR_SGIS_fog_function,
IRR_SGIS_generate_mipmap,
IRR_SGIS_multisample,
IRR_SGIS_pixel_texture,
IRR_SGIS_point_line_texgen,
IRR_SGIS_point_parameters,
IRR_SGIS_sharpen_texture,
IRR_SGIS_texture4D,
IRR_SGIS_texture_border_clamp,
IRR_SGIS_texture_color_mask,
IRR_SGIS_texture_edge_clamp,
IRR_SGIS_texture_filter4,
IRR_SGIS_texture_lod,
IRR_SGIS_texture_select,
IRR_SGI_texture_color_table,
IRR_SGIX_async,
IRR_SGIX_async_histogram,
IRR_SGIX_async_pixel,
IRR_SGIX_blend_alpha_minmax,
IRR_SGIX_calligraphic_fragment,
IRR_SGIX_clipmap,
IRR_SGIX_convolution_accuracy,
IRR_SGIX_depth_pass_instrument,
IRR_SGIX_depth_texture,
IRR_SGIX_flush_raster,
IRR_SGIX_fog_offset,
IRR_SGIX_fog_scale,
IRR_SGIX_fragment_lighting,
IRR_SGIX_framezoom,
IRR_SGIX_igloo_interface,
IRR_SGIX_impact_pixel_texture,
IRR_SGIX_instruments,
IRR_SGIX_interlace,
IRR_SGIX_ir_instrument1,
IRR_SGIX_list_priority,
IRR_SGIX_pixel_texture,
IRR_SGIX_pixel_tiles,
IRR_SGIX_polynomial_ffd,
IRR_SGIX_reference_plane,
IRR_SGIX_resample,
IRR_SGIX_scalebias_hint,
IRR_SGIX_shadow,
IRR_SGIX_shadow_ambient,
IRR_SGIX_sprite,
IRR_SGIX_subsample,
IRR_SGIX_tag_sample_buffer,
IRR_SGIX_texture_add_env,
IRR_SGIX_texture_coordinate_clamp,
IRR_SGIX_texture_lod_bias,
IRR_SGIX_texture_multi_buffer,
IRR_SGIX_texture_scale_bias,
IRR_SGIX_texture_select,
IRR_SGIX_vertex_preclip,
IRR_SGIX_ycrcb,
IRR_SGIX_ycrcba,
IRR_SGIX_ycrcb_subsample,
IRR_SUN_convolution_border_modes,
IRR_SUN_global_alpha,
IRR_SUN_mesh_array,
IRR_SUN_slice_accum,
IRR_SUN_triangle_list,
IRR_SUN_vertex,
IRR_SUNX_constant_data,
IRR_WIN_phong_shading,
IRR_WIN_specular_fog,
IRR_OpenGL_Feature_Count
};
public:
// constructor
COpenGLExtensionHandler();
// deferred initialization
void initExtensions(bool stencilBuffer);
//! queries the features of the driver, returns true if feature is available
bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const;
// show all features with availablity
void dump() const;
// public access to the (loaded) extensions.
// general functions
void extGlActiveTextureARB(GLenum texture);
void extGlClientActiveTextureARB(GLenum texture);
void extGlPointParameterfARB (GLint loc, GLfloat f);
void extGlPointParameterfvARB (GLint loc, const GLfloat *v);
void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
void extGlCompressedTexImage2D(GLenum target, GLint level,
GLenum internalformat, GLsizei width, GLsizei height,
GLint border, GLsizei imageSize, const void* data);
// shader programming
void extGlGenProgramsARB(GLsizei n, GLuint *programs);
void extGlBindProgramARB(GLenum target, GLuint program);
void extGlProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
void extGlDeleteProgramsARB(GLsizei n, const GLuint *programs);
void extGlProgramLocalParameter4fvARB(GLenum, GLuint, const GLfloat *);
GLhandleARB extGlCreateShaderObjectARB(GLenum shaderType);
void extGlShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
void extGlCompileShaderARB(GLhandleARB shader);
GLhandleARB extGlCreateProgramObjectARB(void);
void extGlAttachObjectARB(GLhandleARB program, GLhandleARB shader);
void extGlLinkProgramARB(GLhandleARB program);
void extGlUseProgramObjectARB(GLhandleARB prog);
void extGlDeleteObjectARB(GLhandleARB object);
void extGlGetInfoLogARB(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
void extGlGetObjectParameterivARB(GLhandleARB object, GLenum type, int *param);
GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
void extGlUniform4fvARB(GLint location, GLsizei count, const GLfloat *v);
void extGlUniform1ivARB (GLint loc, GLsizei count, const GLint *v);
void extGlUniform1fvARB (GLint loc, GLsizei count, const GLfloat *v);
void extGlUniform2fvARB (GLint loc, GLsizei count, const GLfloat *v);
void extGlUniform3fvARB (GLint loc, GLsizei count, const GLfloat *v);
void extGlUniformMatrix2fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
void extGlUniformMatrix3fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
void extGlUniformMatrix4fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
void extGlGetActiveUniformARB (GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
// framebuffer objects
void extGlBindFramebufferEXT (GLenum target, GLuint framebuffer);
void extGlDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
void extGlGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
GLenum extGlCheckFramebufferStatusEXT (GLenum target);
void extGlFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
void extGlBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
void extGlDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
void extGlGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
void extGlRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
void extGlFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
// Some variables for properties
bool StencilBuffer;
bool MultiTextureExtension;
bool MultiSamplingExtension;
bool AnisotropyExtension;
bool SeparateStencilExtension;
bool TextureCompressionExtension;
bool PackedDepthStencilExtension;
bool SeparateSpecularColorExtension;
// Some non-boolean properties
GLint MaxTextureUnits;
GLint MaxLights;
GLint MaxIndices;
f32 MaxAnisotropy;
protected:
// the global feature array
bool FeatureAvailable[IRR_OpenGL_Feature_Count];
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
PFNGLCLIENTACTIVETEXTUREARBPROC pGlClientActiveTextureARB;
PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsARB;
PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
PFNGLPOINTPARAMETERFARBPROC pGlPointParameterfARB;
PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
#ifdef GL_ATI_separate_stencil
PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
#endif
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
#endif // PFNGLCOMPRESSEDTEXIMAGE2DPROC
#ifdef _IRR_WINDOWS_API_
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPROC)(int);
PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT;
#elif defined(_IRR_LINUX_PLATFORM_) && defined(GLX_SGI_swap_control)
PFNGLXSWAPINTERVALSGIPROC glxSwapIntervalSGI;
#endif
PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
#endif
};
}
}
#endif