aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 17:24:39 +1000
committerDavid Walter Seikel2013-01-13 17:24:39 +1000
commit393b5cd1dc438872af89d334ef6e5fcc59f27d47 (patch)
tree6a14521219942a08a1b95cb2f5a923a9edd60f63 /libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h
parentAdd a note about rasters suggested start up code. (diff)
downloadSledjHamr-393b5cd1dc438872af89d334ef6e5fcc59f27d47.zip
SledjHamr-393b5cd1dc438872af89d334ef6e5fcc59f27d47.tar.gz
SledjHamr-393b5cd1dc438872af89d334ef6e5fcc59f27d47.tar.bz2
SledjHamr-393b5cd1dc438872af89d334ef6e5fcc59f27d47.tar.xz
Added Irrlicht 1.8, but without all the Windows binaries.
Diffstat (limited to 'libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h')
-rw-r--r--libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h2587
1 files changed, 2587 insertions, 0 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h b/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h
new file mode 100644
index 0000000..109e243
--- /dev/null
+++ b/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.h
@@ -0,0 +1,2587 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in Irrlicht.h
4
5#ifndef __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
6#define __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
7
8#include "IrrCompileConfig.h"
9#ifdef _IRR_COMPILE_WITH_OPENGL_
10
11#include "EDriverFeatures.h"
12#include "irrTypes.h"
13#include "os.h"
14
15#if defined(_IRR_WINDOWS_API_)
16 // include windows headers for HWND
17 #define WIN32_LEAN_AND_MEAN
18 #include <windows.h>
19 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
20 #define GL_GLEXT_LEGACY 1
21 #endif
22 #include <GL/gl.h>
23 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
24 #include "glext.h"
25 #endif
26 #include "wglext.h"
27
28 #ifdef _MSC_VER
29 #pragma comment(lib, "OpenGL32.lib")
30 #endif
31
32#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
33 #include "CIrrDeviceMacOSX.h"
34 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
35 #define GL_GLEXT_LEGACY 1
36 #endif
37 #include <OpenGL/gl.h>
38 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
39 #include "glext.h"
40 #endif
41#elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_)
42 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
43 #define GL_GLEXT_LEGACY 1
44 #define GLX_GLXEXT_LEGACY 1
45 #else
46 #define GL_GLEXT_PROTOTYPES 1
47 #define GLX_GLXEXT_PROTOTYPES 1
48 #endif
49 #define NO_SDL_GLEXT
50 #include <SDL/SDL_video.h>
51 #include <SDL/SDL_opengl.h>
52 #include "glext.h"
53#else
54 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
55 #define GL_GLEXT_LEGACY 1
56 #define GLX_GLXEXT_LEGACY 1
57 #else
58 #define GL_GLEXT_PROTOTYPES 1
59 #define GLX_GLXEXT_PROTOTYPES 1
60 #endif
61 #include <GL/gl.h>
62 #include <GL/glx.h>
63 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
64 #include "glext.h"
65 #undef GLX_ARB_get_proc_address // avoid problems with local glxext.h
66 #include "glxext.h"
67 #endif
68#endif
69
70#ifndef GL_ARB_shader_objects
71/* GL types for program/shader text and shader object handles */
72typedef char GLcharARB;
73typedef unsigned int GLhandleARB;
74#endif
75
76#ifndef GL_VERSION_2_0
77/* GL type for program/shader text */
78typedef char GLchar;
79#endif
80
81
82namespace irr
83{
84namespace video
85{
86
87
88static const char* const OpenGLFeatureStrings[] = {
89 "GL_3DFX_multisample",
90 "GL_3DFX_tbuffer",
91 "GL_3DFX_texture_compression_FXT1",
92 "GL_AMD_blend_minmax_factor",
93 "GL_AMD_conservative_depth",
94 "GL_AMD_debug_output",
95 "GL_AMD_depth_clamp_separate",
96 "GL_AMD_draw_buffers_blend",
97 "GL_AMD_multi_draw_indirect",
98 "GL_AMD_name_gen_delete",
99 "GL_AMD_performance_monitor",
100 "GL_AMD_sample_positions",
101 "GL_AMD_seamless_cubemap_per_texture",
102 "GL_AMD_shader_stencil_export",
103 "GL_AMD_texture_texture4",
104 "GL_AMD_transform_feedback3_lines_triangles",
105 "GL_AMD_vertex_shader_tesselator",
106 "GL_APPLE_aux_depth_stencil",
107 "GL_APPLE_client_storage",
108 "GL_APPLE_element_array",
109 "GL_APPLE_fence",
110 "GL_APPLE_float_pixels",
111 "GL_APPLE_flush_buffer_range",
112 "GL_APPLE_object_purgeable",
113 "GL_APPLE_rgb_422",
114 "GL_APPLE_row_bytes",
115 "GL_APPLE_specular_vector",
116 "GL_APPLE_texture_range",
117 "GL_APPLE_transform_hint",
118 "GL_APPLE_vertex_array_object",
119 "GL_APPLE_vertex_array_range",
120 "GL_APPLE_vertex_program_evaluators",
121 "GL_APPLE_ycbcr_422",
122 "GL_ARB_base_instance",
123 "GL_ARB_blend_func_extended",
124 "GL_ARB_cl_event",
125 "GL_ARB_color_buffer_float",
126 "GL_ARB_compatibility",
127 "GL_ARB_compressed_texture_pixel_storage",
128 "GL_ARB_conservative_depth",
129 "GL_ARB_copy_buffer",
130 "GL_ARB_debug_output",
131 "GL_ARB_depth_buffer_float",
132 "GL_ARB_depth_clamp",
133 "GL_ARB_depth_texture",
134 "GL_ARB_draw_buffers",
135 "GL_ARB_draw_buffers_blend",
136 "GL_ARB_draw_elements_base_vertex",
137 "GL_ARB_draw_indirect",
138 "GL_ARB_draw_instanced",
139 "GL_ARB_ES2_compatibility",
140 "GL_ARB_explicit_attrib_location",
141 "GL_ARB_fragment_coord_conventions",
142 "GL_ARB_fragment_program",
143 "GL_ARB_fragment_program_shadow",
144 "GL_ARB_fragment_shader",
145 "GL_ARB_framebuffer_object",
146 "GL_ARB_framebuffer_sRGB",
147 "GL_ARB_get_program_binary",
148 "GL_ARB_geometry_shader4",
149 "GL_ARB_gpu_shader5",
150 "GL_ARB_gpu_shader_fp64",
151 "GL_ARB_half_float_pixel",
152 "GL_ARB_half_float_vertex",
153 "GL_ARB_imaging",
154 "GL_ARB_instanced_arrays",
155 "GL_ARB_internalformat_query",
156 "GL_ARB_map_buffer_alignment",
157 "GL_ARB_map_buffer_range",
158 "GL_ARB_matrix_palette",
159 "GL_ARB_multisample",
160 "GL_ARB_multitexture",
161 "GL_ARB_occlusion_query",
162 "GL_ARB_occlusion_query2",
163 "GL_ARB_pixel_buffer_object",
164 "GL_ARB_point_parameters",
165 "GL_ARB_point_sprite",
166 "GL_ARB_provoking_vertex",
167 "GL_ARB_robustness",
168 "GL_ARB_sample_shading",
169 "GL_ARB_sampler_objects",
170 "GL_ARB_seamless_cube_map",
171 "GL_ARB_separate_shader_objects",
172 "GL_ARB_shader_atomic_counters",
173 "GL_ARB_shader_bit_encoding",
174 "GL_ARB_shader_image_load_store",
175 "GL_ARB_shader_objects",
176 "GL_ARB_shader_precision",
177 "GL_ARB_shader_stencil_export",
178 "GL_ARB_shader_subroutine",
179 "GL_ARB_shader_texture_lod",
180 "GL_ARB_shading_language_100",
181 "GL_ARB_shading_language_420pack",
182 "GL_ARB_shading_language_include",
183 "GL_ARB_shading_language_packing",
184 "GL_ARB_shadow",
185 "GL_ARB_shadow_ambient",
186 "GL_ARB_sync",
187 "GL_ARB_tessellation_shader",
188 "GL_ARB_texture_border_clamp",
189 "GL_ARB_texture_buffer_object",
190 "GL_ARB_texture_buffer_object_rgb32",
191 "GL_ARB_texture_compression",
192 "GL_ARB_texture_compression_bptc",
193 "GL_ARB_texture_compression_rgtc",
194 "GL_ARB_texture_cube_map",
195 "GL_ARB_texture_cube_map_array",
196 "GL_ARB_texture_env_add",
197 "GL_ARB_texture_env_combine",
198 "GL_ARB_texture_env_crossbar",
199 "GL_ARB_texture_env_dot3",
200 "GL_ARB_texture_float",
201 "GL_ARB_texture_gather",
202 "GL_ARB_texture_mirrored_repeat",
203 "GL_ARB_texture_multisample",
204 "GL_ARB_texture_non_power_of_two",
205 "GL_ARB_texture_query_lod",
206 "GL_ARB_texture_rectangle",
207 "GL_ARB_texture_rg",
208 "GL_ARB_texture_rgb10_a2ui",
209 "GL_ARB_texture_storage",
210 "GL_ARB_texture_swizzle",
211 "GL_ARB_timer_query",
212 "GL_ARB_transform_feedback2",
213 "GL_ARB_transform_feedback3",
214 "GL_ARB_transform_feedback_instanced",
215 "GL_ARB_transpose_matrix",
216 "GL_ARB_uniform_buffer_object",
217 "GL_ARB_vertex_array_bgra",
218 "GL_ARB_vertex_array_object",
219 "GL_ARB_vertex_attrib_64bit",
220 "GL_ARB_vertex_blend",
221 "GL_ARB_vertex_buffer_object",
222 "GL_ARB_vertex_program",
223 "GL_ARB_vertex_shader",
224 "GL_ARB_vertex_type_2_10_10_10_rev",
225 "GL_ARB_viewport_array",
226 "GL_ARB_window_pos",
227 "GL_ATI_draw_buffers",
228 "GL_ATI_element_array",
229 "GL_ATI_envmap_bumpmap",
230 "GL_ATI_fragment_shader",
231 "GL_ATI_map_object_buffer",
232 "GL_ATI_meminfo",
233 "GL_ATI_pixel_format_float",
234 "GL_ATI_pn_triangles",
235 "GL_ATI_separate_stencil",
236 "GL_ATI_text_fragment_shader",
237 "GL_ATI_texture_env_combine3",
238 "GL_ATI_texture_float",
239 "GL_ATI_texture_mirror_once",
240 "GL_ATI_vertex_array_object",
241 "GL_ATI_vertex_attrib_array_object",
242 "GL_ATI_vertex_streams",
243 "GL_EXT_422_pixels",
244 "GL_EXT_abgr",
245 "GL_EXT_bgra",
246 "GL_EXT_bindable_uniform",
247 "GL_EXT_blend_color",
248 "GL_EXT_blend_equation_separate",
249 "GL_EXT_blend_func_separate",
250 "GL_EXT_blend_logic_op",
251 "GL_EXT_blend_minmax",
252 "GL_EXT_blend_subtract",
253 "GL_EXT_clip_volume_hint",
254 "GL_EXT_cmyka",
255 "GL_EXT_color_subtable",
256 "GL_EXT_compiled_vertex_array",
257 "GL_EXT_convolution",
258 "GL_EXT_coordinate_frame",
259 "GL_EXT_copy_texture",
260 "GL_EXT_cull_vertex",
261 "GL_EXT_depth_bounds_test",
262 "GL_EXT_direct_state_access",
263 "GL_EXT_draw_buffers2",
264 "GL_EXT_draw_instanced",
265 "GL_EXT_draw_range_elements",
266 "GL_EXT_fog_coord",
267 "GL_EXT_framebuffer_blit",
268 "GL_EXT_framebuffer_multisample",
269 "GL_EXT_framebuffer_multisample_blit_scaled",
270 "GL_EXT_framebuffer_object",
271 "GL_EXT_framebuffer_sRGB",
272 "GL_EXT_geometry_shader4",
273 "GL_EXT_gpu_program_parameters",
274 "GL_EXT_gpu_shader4",
275 "GL_EXT_histogram",
276 "GL_EXT_index_array_formats",
277 "GL_EXT_index_func",
278 "GL_EXT_index_material",
279 "GL_EXT_index_texture",
280 "GL_EXT_light_texture",
281 "GL_EXT_misc_attribute",
282 "GL_EXT_multi_draw_arrays",
283 "GL_EXT_multisample",
284 "GL_EXT_packed_depth_stencil",
285 "GL_EXT_packed_float",
286 "GL_EXT_packed_pixels",
287 "GL_EXT_paletted_texture",
288 "GL_EXT_pixel_buffer_object",
289 "GL_EXT_pixel_transform",
290 "GL_EXT_pixel_transform_color_table",
291 "GL_EXT_point_parameters",
292 "GL_EXT_polygon_offset",
293 "GL_EXT_provoking_vertex",
294 "GL_EXT_rescale_normal",
295 "GL_EXT_secondary_color",
296 "GL_EXT_separate_shader_objects",
297 "GL_EXT_separate_specular_color",
298 "GL_EXT_shader_image_load_store",
299 "GL_EXT_shadow_funcs",
300 "GL_EXT_shared_texture_palette",
301 "GL_EXT_stencil_clear_tag",
302 "GL_EXT_stencil_two_side",
303 "GL_EXT_stencil_wrap",
304 "GL_EXT_subtexture",
305 "GL_EXT_texture",
306 "GL_EXT_texture3D",
307 "GL_EXT_texture_array",
308 "GL_EXT_texture_buffer_object",
309 "GL_EXT_texture_compression_latc",
310 "GL_EXT_texture_compression_rgtc",
311 "GL_EXT_texture_compression_s3tc",
312 "GL_EXT_texture_cube_map",
313 "GL_EXT_texture_env_add",
314 "GL_EXT_texture_env_combine",
315 "GL_EXT_texture_env_dot3",
316 "GL_EXT_texture_filter_anisotropic",
317 "GL_EXT_texture_integer",
318 "GL_EXT_texture_lod_bias",
319 "GL_EXT_texture_mirror_clamp",
320 "GL_EXT_texture_object",
321 "GL_EXT_texture_perturb_normal",
322 "GL_EXT_texture_shared_exponent",
323 "GL_EXT_texture_snorm",
324 "GL_EXT_texture_sRGB",
325 "GL_EXT_texture_sRGB_decode",
326 "GL_EXT_texture_swizzle",
327 "GL_EXT_timer_query",
328 "GL_EXT_transform_feedback",
329 "GL_EXT_vertex_array",
330 "GL_EXT_vertex_array_bgra",
331 "GL_EXT_vertex_attrib_64bit",
332 "GL_EXT_vertex_shader",
333 "GL_EXT_vertex_weighting",
334 "GL_EXT_x11_sync_object",
335 "GL_FfdMaskSGIX",
336 "GL_GREMEDY_frame_terminator",
337 "GL_GREMEDY_string_marker",
338 "GL_HP_convolution_border_modes",
339 "GL_HP_image_transform",
340 "GL_HP_occlusion_test",
341 "GL_HP_texture_lighting",
342 "GL_IBM_cull_vertex",
343 "GL_IBM_multimode_draw_arrays",
344 "GL_IBM_rasterpos_clip",
345 "GL_IBM_texture_mirrored_repeat",
346 "GL_IBM_vertex_array_lists",
347 "GL_INGR_blend_func_separate",
348 "GL_INGR_color_clamp",
349 "GL_INGR_interlace_read",
350 "GL_INGR_palette_buffer",
351 "GL_INTEL_parallel_arrays",
352 "GL_INTEL_texture_scissor",
353 "GL_MESA_pack_invert",
354 "GL_MESA_resize_buffers",
355 "GL_MESA_window_pos",
356 "GL_MESAX_texture_stack",
357 "GL_MESA_ycbcr_texture",
358 "GL_NV_blend_square",
359 "GL_NV_conditional_render",
360 "GL_NV_copy_depth_to_color",
361 "GL_NV_copy_image",
362 "GL_NV_depth_buffer_float",
363 "GL_NV_depth_clamp",
364 "GL_NV_evaluators",
365 "GL_NV_explicit_multisample",
366 "GL_NV_fence",
367 "GL_NV_float_buffer",
368 "GL_NV_fog_distance",
369 "GL_NV_fragment_program",
370 "GL_NV_fragment_program2",
371 "GL_NV_fragment_program4",
372 "GL_NV_fragment_program_option",
373 "GL_NV_framebuffer_multisample_coverage",
374 "GL_NV_geometry_program4",
375 "GL_NV_geometry_shader4",
376 "GL_NV_gpu_program4",
377 "GL_NV_gpu_program5",
378 "GL_NV_gpu_shader5",
379 "GL_NV_half_float",
380 "GL_NV_light_max_exponent",
381 "GL_NV_multisample_coverage",
382 "GL_NV_multisample_filter_hint",
383 "GL_NV_occlusion_query",
384 "GL_NV_packed_depth_stencil",
385 "GL_NV_parameter_buffer_object",
386 "GL_NV_parameter_buffer_object2",
387 "GL_NV_pixel_data_range",
388 "GL_NV_point_sprite",
389 "GL_NV_present_video",
390 "GL_NV_primitive_restart",
391 "GL_NV_register_combiners",
392 "GL_NV_register_combiners2",
393 "GL_NV_shader_buffer_load",
394 "GL_NV_shader_buffer_store",
395 "GL_NV_tessellation_program5",
396 "GL_NV_texgen_emboss",
397 "GL_NV_texgen_reflection",
398 "GL_NV_texture_barrier",
399 "GL_NV_texture_compression_vtc",
400 "GL_NV_texture_env_combine4",
401 "GL_NV_texture_expand_normal",
402 "GL_NV_texture_multisample",
403 "GL_NV_texture_rectangle",
404 "GL_NV_texture_shader",
405 "GL_NV_texture_shader2",
406 "GL_NV_texture_shader3",
407 "GL_NV_transform_feedback",
408 "GL_NV_transform_feedback2",
409 "GL_NV_vdpau_interop",
410 "GL_NV_vertex_array_range",
411 "GL_NV_vertex_array_range2",
412 "GL_NV_vertex_attrib_integer_64bit",
413 "GL_NV_vertex_buffer_unified_memory",
414 "GL_NV_vertex_program",
415 "GL_NV_vertex_program1_1",
416 "GL_NV_vertex_program2",
417 "GL_NV_vertex_program2_option",
418 "GL_NV_vertex_program3",
419 "GL_NV_vertex_program4",
420 "GL_NV_video_capture",
421 "GL_OES_read_format",
422 "GL_OML_interlace",
423 "GL_OML_resample",
424 "GL_OML_subsample",
425 "GL_PGI_misc_hints",
426 "GL_PGI_vertex_hints",
427 "GL_REND_screen_coordinates",
428 "GL_S3_s3tc",
429 "GL_SGI_color_matrix",
430 "GL_SGI_color_table",
431 "GL_SGI_depth_pass_instrument",
432 "GL_SGIS_detail_texture",
433 "GL_SGIS_fog_function",
434 "GL_SGIS_generate_mipmap",
435 "GL_SGIS_multisample",
436 "GL_SGIS_pixel_texture",
437 "GL_SGIS_point_line_texgen",
438 "GL_SGIS_point_parameters",
439 "GL_SGIS_sharpen_texture",
440 "GL_SGIS_texture4D",
441 "GL_SGIS_texture_border_clamp",
442 "GL_SGIS_texture_color_mask",
443 "GL_SGIS_texture_edge_clamp",
444 "GL_SGIS_texture_filter4",
445 "GL_SGIS_texture_lod",
446 "GL_SGIS_texture_select",
447 "GL_SGI_texture_color_table",
448 "GL_SGIX_async",
449 "GL_SGIX_async_histogram",
450 "GL_SGIX_async_pixel",
451 "GL_SGIX_blend_alpha_minmax",
452 "GL_SGIX_calligraphic_fragment",
453 "GL_SGIX_clipmap",
454 "GL_SGIX_convolution_accuracy",
455 "GL_SGIX_depth_pass_instrument",
456 "GL_SGIX_depth_texture",
457 "GL_SGIX_flush_raster",
458 "GL_SGIX_fog_offset",
459 "GL_SGIX_fog_scale",
460 "GL_SGIX_fragment_lighting",
461 "GL_SGIX_framezoom",
462 "GL_SGIX_igloo_interface",
463 "GL_SGIX_impact_pixel_texture",
464 "GL_SGIX_instruments",
465 "GL_SGIX_interlace",
466 "GL_SGIX_ir_instrument1",
467 "GL_SGIX_list_priority",
468 "GL_SGIX_pixel_texture",
469 "GL_SGIX_pixel_tiles",
470 "GL_SGIX_polynomial_ffd",
471 "GL_SGIX_reference_plane",
472 "GL_SGIX_resample",
473 "GL_SGIX_scalebias_hint",
474 "GL_SGIX_shadow",
475 "GL_SGIX_shadow_ambient",
476 "GL_SGIX_sprite",
477 "GL_SGIX_subsample",
478 "GL_SGIX_tag_sample_buffer",
479 "GL_SGIX_texture_add_env",
480 "GL_SGIX_texture_coordinate_clamp",
481 "GL_SGIX_texture_lod_bias",
482 "GL_SGIX_texture_multi_buffer",
483 "GL_SGIX_texture_scale_bias",
484 "GL_SGIX_texture_select",
485 "GL_SGIX_vertex_preclip",
486 "GL_SGIX_ycrcb",
487 "GL_SGIX_ycrcba",
488 "GL_SGIX_ycrcb_subsample",
489 "GL_SUN_convolution_border_modes",
490 "GL_SUN_global_alpha",
491 "GL_SUN_mesh_array",
492 "GL_SUN_slice_accum",
493 "GL_SUN_triangle_list",
494 "GL_SUN_vertex",
495 "GL_SUNX_constant_data",
496 "GL_WIN_phong_shading",
497 "GL_WIN_specular_fog",
498 // unofficial stuff
499 "GL_NVX_gpu_memory_info"
500};
501
502
503class COpenGLExtensionHandler
504{
505 public:
506 enum EOpenGLFeatures {
507 IRR_3DFX_multisample = 0,
508 IRR_3DFX_tbuffer,
509 IRR_3DFX_texture_compression_FXT1,
510 IRR_AMD_blend_minmax_factor,
511 IRR_AMD_conservative_depth,
512 IRR_AMD_debug_output,
513 IRR_AMD_depth_clamp_separate,
514 IRR_AMD_draw_buffers_blend,
515 IRR_AMD_multi_draw_indirect,
516 IRR_AMD_name_gen_delete,
517 IRR_AMD_performance_monitor,
518 IRR_AMD_sample_positions,
519 IRR_AMD_seamless_cubemap_per_texture,
520 IRR_AMD_shader_stencil_export,
521 IRR_AMD_texture_texture4,
522 IRR_AMD_transform_feedback3_lines_triangles,
523 IRR_AMD_vertex_shader_tesselator,
524 IRR_APPLE_aux_depth_stencil,
525 IRR_APPLE_client_storage,
526 IRR_APPLE_element_array,
527 IRR_APPLE_fence,
528 IRR_APPLE_float_pixels,
529 IRR_APPLE_flush_buffer_range,
530 IRR_APPLE_object_purgeable,
531 IRR_APPLE_rgb_422,
532 IRR_APPLE_row_bytes,
533 IRR_APPLE_specular_vector,
534 IRR_APPLE_texture_range,
535 IRR_APPLE_transform_hint,
536 IRR_APPLE_vertex_array_object,
537 IRR_APPLE_vertex_array_range,
538 IRR_APPLE_vertex_program_evaluators,
539 IRR_APPLE_ycbcr_422,
540 IRR_ARB_base_instance,
541 IRR_ARB_blend_func_extended,
542 IRR_ARB_cl_event,
543 IRR_ARB_color_buffer_float,
544 IRR_ARB_compatibility,
545 IRR_ARB_compressed_texture_pixel_storage,
546 IRR_ARB_conservative_depth,
547 IRR_ARB_copy_buffer,
548 IRR_ARB_debug_output,
549 IRR_ARB_depth_buffer_float,
550 IRR_ARB_depth_clamp,
551 IRR_ARB_depth_texture,
552 IRR_ARB_draw_buffers,
553 IRR_ARB_draw_buffers_blend,
554 IRR_ARB_draw_elements_base_vertex,
555 IRR_ARB_draw_indirect,
556 IRR_ARB_draw_instanced,
557 IRR_ARB_ES2_compatibility,
558 IRR_ARB_explicit_attrib_location,
559 IRR_ARB_fragment_coord_conventions,
560 IRR_ARB_fragment_program,
561 IRR_ARB_fragment_program_shadow,
562 IRR_ARB_fragment_shader,
563 IRR_ARB_framebuffer_object,
564 IRR_ARB_framebuffer_sRGB,
565 IRR_ARB_geometry_shader4,
566 IRR_ARB_get_program_binary,
567 IRR_ARB_gpu_shader5,
568 IRR_ARB_gpu_shader_fp64,
569 IRR_ARB_half_float_pixel,
570 IRR_ARB_half_float_vertex,
571 IRR_ARB_imaging,
572 IRR_ARB_instanced_arrays,
573 IRR_ARB_internalformat_query,
574 IRR_ARB_map_buffer_alignment,
575 IRR_ARB_map_buffer_range,
576 IRR_ARB_matrix_palette,
577 IRR_ARB_multisample,
578 IRR_ARB_multitexture,
579 IRR_ARB_occlusion_query,
580 IRR_ARB_occlusion_query2,
581 IRR_ARB_pixel_buffer_object,
582 IRR_ARB_point_parameters,
583 IRR_ARB_point_sprite,
584 IRR_ARB_provoking_vertex,
585 IRR_ARB_robustness,
586 IRR_ARB_sample_shading,
587 IRR_ARB_sampler_objects,
588 IRR_ARB_seamless_cube_map,
589 IRR_ARB_separate_shader_objects,
590 IRR_ARB_shader_atomic_counters,
591 IRR_ARB_shader_bit_encoding,
592 IRR_ARB_shader_image_load_store,
593 IRR_ARB_shader_objects,
594 IRR_ARB_shader_precision,
595 IRR_ARB_shader_stencil_export,
596 IRR_ARB_shader_subroutine,
597 IRR_ARB_shader_texture_lod,
598 IRR_ARB_shading_language_100,
599 IRR_ARB_shading_language_420pack,
600 IRR_ARB_shading_language_include,
601 IRR_ARB_shading_language_packing,
602 IRR_ARB_shadow,
603 IRR_ARB_shadow_ambient,
604 IRR_ARB_sync,
605 IRR_ARB_tessellation_shader,
606 IRR_ARB_texture_border_clamp,
607 IRR_ARB_texture_buffer_object,
608 IRR_ARB_texture_buffer_object_rgb32,
609 IRR_ARB_texture_compression,
610 IRR_ARB_texture_compression_bptc,
611 IRR_ARB_texture_compression_rgtc,
612 IRR_ARB_texture_cube_map,
613 IRR_ARB_texture_cube_map_array,
614 IRR_ARB_texture_env_add,
615 IRR_ARB_texture_env_combine,
616 IRR_ARB_texture_env_crossbar,
617 IRR_ARB_texture_env_dot3,
618 IRR_ARB_texture_float,
619 IRR_ARB_texture_gather,
620 IRR_ARB_texture_mirrored_repeat,
621 IRR_ARB_texture_multisample,
622 IRR_ARB_texture_non_power_of_two,
623 IRR_ARB_texture_query_lod,
624 IRR_ARB_texture_rectangle,
625 IRR_ARB_texture_rg,
626 IRR_ARB_texture_rgb10_a2ui,
627 IRR_ARB_texture_storage,
628 IRR_ARB_texture_swizzle,
629 IRR_ARB_timer_query,
630 IRR_ARB_transform_feedback2,
631 IRR_ARB_transform_feedback3,
632 IRR_ARB_transform_feedback_instanced,
633 IRR_ARB_transpose_matrix,
634 IRR_ARB_uniform_buffer_object,
635 IRR_ARB_vertex_array_bgra,
636 IRR_ARB_vertex_array_object,
637 IRR_ARB_vertex_attrib_64bit,
638 IRR_ARB_vertex_blend,
639 IRR_ARB_vertex_buffer_object,
640 IRR_ARB_vertex_program,
641 IRR_ARB_vertex_shader,
642 IRR_ARB_vertex_type_2_10_10_10_rev,
643 IRR_ARB_viewport_array,
644 IRR_ARB_window_pos,
645 IRR_ATI_draw_buffers,
646 IRR_ATI_element_array,
647 IRR_ATI_envmap_bumpmap,
648 IRR_ATI_fragment_shader,
649 IRR_ATI_map_object_buffer,
650 IRR_ATI_meminfo,
651 IRR_ATI_pixel_format_float,
652 IRR_ATI_pn_triangles,
653 IRR_ATI_separate_stencil,
654 IRR_ATI_text_fragment_shader,
655 IRR_ATI_texture_env_combine3,
656 IRR_ATI_texture_float,
657 IRR_ATI_texture_mirror_once,
658 IRR_ATI_vertex_array_object,
659 IRR_ATI_vertex_attrib_array_object,
660 IRR_ATI_vertex_streams,
661 IRR_EXT_422_pixels,
662 IRR_EXT_abgr,
663 IRR_EXT_bgra,
664 IRR_EXT_bindable_uniform,
665 IRR_EXT_blend_color,
666 IRR_EXT_blend_equation_separate,
667 IRR_EXT_blend_func_separate,
668 IRR_EXT_blend_logic_op,
669 IRR_EXT_blend_minmax,
670 IRR_EXT_blend_subtract,
671 IRR_EXT_clip_volume_hint,
672 IRR_EXT_cmyka,
673 IRR_EXT_color_subtable,
674 IRR_EXT_compiled_vertex_array,
675 IRR_EXT_convolution,
676 IRR_EXT_coordinate_frame,
677 IRR_EXT_copy_texture,
678 IRR_EXT_cull_vertex,
679 IRR_EXT_depth_bounds_test,
680 IRR_EXT_direct_state_access,
681 IRR_EXT_draw_buffers2,
682 IRR_EXT_draw_instanced,
683 IRR_EXT_draw_range_elements,
684 IRR_EXT_fog_coord,
685 IRR_EXT_framebuffer_blit,
686 IRR_EXT_framebuffer_multisample,
687 IRR_EXT_framebuffer_multisample_blit_scaled,
688 IRR_EXT_framebuffer_object,
689 IRR_EXT_framebuffer_sRGB,
690 IRR_EXT_geometry_shader4,
691 IRR_EXT_gpu_program_parameters,
692 IRR_EXT_gpu_shader4,
693 IRR_EXT_histogram,
694 IRR_EXT_index_array_formats,
695 IRR_EXT_index_func,
696 IRR_EXT_index_material,
697 IRR_EXT_index_texture,
698 IRR_EXT_light_texture,
699 IRR_EXT_misc_attribute,
700 IRR_EXT_multi_draw_arrays,
701 IRR_EXT_multisample,
702 IRR_EXT_packed_depth_stencil,
703 IRR_EXT_packed_float,
704 IRR_EXT_packed_pixels,
705 IRR_EXT_paletted_texture,
706 IRR_EXT_pixel_buffer_object,
707 IRR_EXT_pixel_transform,
708 IRR_EXT_pixel_transform_color_table,
709 IRR_EXT_point_parameters,
710 IRR_EXT_polygon_offset,
711 IRR_EXT_provoking_vertex,
712 IRR_EXT_rescale_normal,
713 IRR_EXT_secondary_color,
714 IRR_EXT_separate_shader_objects,
715 IRR_EXT_separate_specular_color,
716 IRR_EXT_shader_image_load_store,
717 IRR_EXT_shadow_funcs,
718 IRR_EXT_shared_texture_palette,
719 IRR_EXT_stencil_clear_tag,
720 IRR_EXT_stencil_two_side,
721 IRR_EXT_stencil_wrap,
722 IRR_EXT_subtexture,
723 IRR_EXT_texture,
724 IRR_EXT_texture3D,
725 IRR_EXT_texture_array,
726 IRR_EXT_texture_buffer_object,
727 IRR_EXT_texture_compression_latc,
728 IRR_EXT_texture_compression_rgtc,
729 IRR_EXT_texture_compression_s3tc,
730 IRR_EXT_texture_cube_map,
731 IRR_EXT_texture_env_add,
732 IRR_EXT_texture_env_combine,
733 IRR_EXT_texture_env_dot3,
734 IRR_EXT_texture_filter_anisotropic,
735 IRR_EXT_texture_integer,
736 IRR_EXT_texture_lod_bias,
737 IRR_EXT_texture_mirror_clamp,
738 IRR_EXT_texture_object,
739 IRR_EXT_texture_perturb_normal,
740 IRR_EXT_texture_shared_exponent,
741 IRR_EXT_texture_snorm,
742 IRR_EXT_texture_sRGB,
743 IRR_EXT_texture_sRGB_decode,
744 IRR_EXT_texture_swizzle,
745 IRR_EXT_timer_query,
746 IRR_EXT_transform_feedback,
747 IRR_EXT_vertex_array,
748 IRR_EXT_vertex_array_bgra,
749 IRR_EXT_vertex_attrib_64bit,
750 IRR_EXT_vertex_shader,
751 IRR_EXT_vertex_weighting,
752 IRR_EXT_x11_sync_object,
753 IRR_FfdMaskSGIX,
754 IRR_GREMEDY_frame_terminator,
755 IRR_GREMEDY_string_marker,
756 IRR_HP_convolution_border_modes,
757 IRR_HP_image_transform,
758 IRR_HP_occlusion_test,
759 IRR_HP_texture_lighting,
760 IRR_IBM_cull_vertex,
761 IRR_IBM_multimode_draw_arrays,
762 IRR_IBM_rasterpos_clip,
763 IRR_IBM_texture_mirrored_repeat,
764 IRR_IBM_vertex_array_lists,
765 IRR_INGR_blend_func_separate,
766 IRR_INGR_color_clamp,
767 IRR_INGR_interlace_read,
768 IRR_INGR_palette_buffer,
769 IRR_INTEL_parallel_arrays,
770 IRR_INTEL_texture_scissor,
771 IRR_MESA_pack_invert,
772 IRR_MESA_resize_buffers,
773 IRR_MESA_window_pos,
774 IRR_MESAX_texture_stack,
775 IRR_MESA_ycbcr_texture,
776 IRR_NV_blend_square,
777 IRR_NV_conditional_render,
778 IRR_NV_copy_depth_to_color,
779 IRR_NV_copy_image,
780 IRR_NV_depth_buffer_float,
781 IRR_NV_depth_clamp,
782 IRR_NV_evaluators,
783 IRR_NV_explicit_multisample,
784 IRR_NV_fence,
785 IRR_NV_float_buffer,
786 IRR_NV_fog_distance,
787 IRR_NV_fragment_program,
788 IRR_NV_fragment_program2,
789 IRR_NV_fragment_program4,
790 IRR_NV_fragment_program_option,
791 IRR_NV_framebuffer_multisample_coverage,
792 IRR_NV_geometry_program4,
793 IRR_NV_geometry_shader4,
794 IRR_NV_gpu_program4,
795 IRR_NV_gpu_program5,
796 IRR_NV_gpu_shader5,
797 IRR_NV_half_float,
798 IRR_NV_light_max_exponent,
799 IRR_NV_multisample_coverage,
800 IRR_NV_multisample_filter_hint,
801 IRR_NV_occlusion_query,
802 IRR_NV_packed_depth_stencil,
803 IRR_NV_parameter_buffer_object,
804 IRR_NV_parameter_buffer_object2,
805 IRR_NV_pixel_data_range,
806 IRR_NV_point_sprite,
807 IRR_NV_present_video,
808 IRR_NV_primitive_restart,
809 IRR_NV_register_combiners,
810 IRR_NV_register_combiners2,
811 IRR_NV_shader_buffer_load,
812 IRR_NV_shader_buffer_store,
813 IRR_NV_tessellation_program5,
814 IRR_NV_texgen_emboss,
815 IRR_NV_texgen_reflection,
816 IRR_NV_texture_barrier,
817 IRR_NV_texture_compression_vtc,
818 IRR_NV_texture_env_combine4,
819 IRR_NV_texture_expand_normal,
820 IRR_NV_texture_multisample,
821 IRR_NV_texture_rectangle,
822 IRR_NV_texture_shader,
823 IRR_NV_texture_shader2,
824 IRR_NV_texture_shader3,
825 IRR_NV_transform_feedback,
826 IRR_NV_transform_feedback2,
827 IRR_NV_vdpau_interop,
828 IRR_NV_vertex_array_range,
829 IRR_NV_vertex_array_range2,
830 IRR_NV_vertex_attrib_integer_64bit,
831 IRR_NV_vertex_buffer_unified_memory,
832 IRR_NV_vertex_program,
833 IRR_NV_vertex_program1_1,
834 IRR_NV_vertex_program2,
835 IRR_NV_vertex_program2_option,
836 IRR_NV_vertex_program3,
837 IRR_NV_vertex_program4,
838 IRR_NV_video_capture,
839 IRR_OES_read_format,
840 IRR_OML_interlace,
841 IRR_OML_resample,
842 IRR_OML_subsample,
843 IRR_PGI_misc_hints,
844 IRR_PGI_vertex_hints,
845 IRR_REND_screen_coordinates,
846 IRR_S3_s3tc,
847 IRR_SGI_color_matrix,
848 IRR_SGI_color_table,
849 IRR_SGI_depth_pass_instrument,
850 IRR_SGIS_detail_texture,
851 IRR_SGIS_fog_function,
852 IRR_SGIS_generate_mipmap,
853 IRR_SGIS_multisample,
854 IRR_SGIS_pixel_texture,
855 IRR_SGIS_point_line_texgen,
856 IRR_SGIS_point_parameters,
857 IRR_SGIS_sharpen_texture,
858 IRR_SGIS_texture4D,
859 IRR_SGIS_texture_border_clamp,
860 IRR_SGIS_texture_color_mask,
861 IRR_SGIS_texture_edge_clamp,
862 IRR_SGIS_texture_filter4,
863 IRR_SGIS_texture_lod,
864 IRR_SGIS_texture_select,
865 IRR_SGI_texture_color_table,
866 IRR_SGIX_async,
867 IRR_SGIX_async_histogram,
868 IRR_SGIX_async_pixel,
869 IRR_SGIX_blend_alpha_minmax,
870 IRR_SGIX_calligraphic_fragment,
871 IRR_SGIX_clipmap,
872 IRR_SGIX_convolution_accuracy,
873 IRR_SGIX_depth_pass_instrument,
874 IRR_SGIX_depth_texture,
875 IRR_SGIX_flush_raster,
876 IRR_SGIX_fog_offset,
877 IRR_SGIX_fog_scale,
878 IRR_SGIX_fragment_lighting,
879 IRR_SGIX_framezoom,
880 IRR_SGIX_igloo_interface,
881 IRR_SGIX_impact_pixel_texture,
882 IRR_SGIX_instruments,
883 IRR_SGIX_interlace,
884 IRR_SGIX_ir_instrument1,
885 IRR_SGIX_list_priority,
886 IRR_SGIX_pixel_texture,
887 IRR_SGIX_pixel_tiles,
888 IRR_SGIX_polynomial_ffd,
889 IRR_SGIX_reference_plane,
890 IRR_SGIX_resample,
891 IRR_SGIX_scalebias_hint,
892 IRR_SGIX_shadow,
893 IRR_SGIX_shadow_ambient,
894 IRR_SGIX_sprite,
895 IRR_SGIX_subsample,
896 IRR_SGIX_tag_sample_buffer,
897 IRR_SGIX_texture_add_env,
898 IRR_SGIX_texture_coordinate_clamp,
899 IRR_SGIX_texture_lod_bias,
900 IRR_SGIX_texture_multi_buffer,
901 IRR_SGIX_texture_scale_bias,
902 IRR_SGIX_texture_select,
903 IRR_SGIX_vertex_preclip,
904 IRR_SGIX_ycrcb,
905 IRR_SGIX_ycrcba,
906 IRR_SGIX_ycrcb_subsample,
907 IRR_SUN_convolution_border_modes,
908 IRR_SUN_global_alpha,
909 IRR_SUN_mesh_array,
910 IRR_SUN_slice_accum,
911 IRR_SUN_triangle_list,
912 IRR_SUN_vertex,
913 IRR_SUNX_constant_data,
914 IRR_WIN_phong_shading,
915 IRR_WIN_specular_fog,
916 IRR_NVX_gpu_memory_info,
917 IRR_OpenGL_Feature_Count
918 };
919
920
921 // constructor
922 COpenGLExtensionHandler();
923
924 // deferred initialization
925 void initExtensions(bool stencilBuffer);
926
927 //! queries the features of the driver, returns true if feature is available
928 bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const;
929
930 //! queries the features of the driver, returns true if feature is available
931 bool queryOpenGLFeature(EOpenGLFeatures feature) const
932 {
933 return FeatureAvailable[feature];
934 }
935
936 //! show all features with availablity
937 void dump() const;
938
939 void dumpFramebufferFormats() const;
940
941 // Some variables for properties
942 bool StencilBuffer;
943 bool MultiTextureExtension;
944 bool TextureCompressionExtension;
945
946 // Some non-boolean properties
947 //! Maxmimum texture layers supported by the fixed pipeline
948 u8 MaxSupportedTextures;
949 //! Maxmimum texture layers supported by the engine
950 u8 MaxTextureUnits;
951 //! Maximum hardware lights supported
952 u8 MaxLights;
953 //! Maximal Anisotropy
954 u8 MaxAnisotropy;
955 //! Number of user clipplanes
956 u8 MaxUserClipPlanes;
957 //! Number of auxiliary buffers
958 u8 MaxAuxBuffers;
959 //! Number of rendertargets available as MRTs
960 u8 MaxMultipleRenderTargets;
961 //! Optimal number of indices per meshbuffer
962 u32 MaxIndices;
963 //! Maximal texture dimension
964 u32 MaxTextureSize;
965 //! Maximal vertices handled by geometry shaders
966 u32 MaxGeometryVerticesOut;
967 //! Maximal LOD Bias
968 f32 MaxTextureLODBias;
969 //! Minimal and maximal supported thickness for lines without smoothing
970 GLfloat DimAliasedLine[2];
971 //! Minimal and maximal supported thickness for points without smoothing
972 GLfloat DimAliasedPoint[2];
973 //! Minimal and maximal supported thickness for lines with smoothing
974 GLfloat DimSmoothedLine[2];
975 //! Minimal and maximal supported thickness for points with smoothing
976 GLfloat DimSmoothedPoint[2];
977
978 //! OpenGL version as Integer: 100*Major+Minor, i.e. 2.1 becomes 201
979 u16 Version;
980 //! GLSL version as Integer: 100*Major+Minor
981 u16 ShaderLanguageVersion;
982
983 bool OcclusionQuerySupport;
984
985 // public access to the (loaded) extensions.
986 // general functions
987 void extGlActiveTexture(GLenum texture);
988 void extGlClientActiveTexture(GLenum texture);
989 void extGlPointParameterf(GLint loc, GLfloat f);
990 void extGlPointParameterfv(GLint loc, const GLfloat *v);
991 void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
992 void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
993 void extGlCompressedTexImage2D(GLenum target, GLint level,
994 GLenum internalformat, GLsizei width, GLsizei height,
995 GLint border, GLsizei imageSize, const void* data);
996
997 // shader programming
998 void extGlGenPrograms(GLsizei n, GLuint *programs);
999 void extGlBindProgram(GLenum target, GLuint program);
1000 void extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
1001 void extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string);
1002 void extGlDeletePrograms(GLsizei n, const GLuint *programs);
1003 void extGlProgramLocalParameter4fv(GLenum, GLuint, const GLfloat *);
1004 GLhandleARB extGlCreateShaderObject(GLenum shaderType);
1005 GLuint extGlCreateShader(GLenum shaderType);
1006 // note: Due to the type confusion between shader_objects and OpenGL 2.0
1007 // we have to add the ARB extension for proper method definitions in case
1008 // that handleARB and uint are the same type
1009 void extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
1010 void extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
1011 // note: Due to the type confusion between shader_objects and OpenGL 2.0
1012 // we have to add the ARB extension for proper method definitions in case
1013 // that handleARB and uint are the same type
1014 void extGlCompileShaderARB(GLhandleARB shader);
1015 void extGlCompileShader(GLuint shader);
1016 GLhandleARB extGlCreateProgramObject(void);
1017 GLuint extGlCreateProgram(void);
1018 void extGlAttachObject(GLhandleARB program, GLhandleARB shader);
1019 void extGlAttachShader(GLuint program, GLuint shader);
1020 void extGlLinkProgramARB(GLhandleARB program);
1021 // note: Due to the type confusion between shader_objects and OpenGL 2.0
1022 // we have to add the ARB extension for proper method definitions in case
1023 // that handleARB and uint are the same type
1024 void extGlLinkProgram(GLuint program);
1025 void extGlUseProgramObject(GLhandleARB prog);
1026 void extGlUseProgram(GLuint prog);
1027 void extGlDeleteObject(GLhandleARB object);
1028 void extGlDeleteProgram(GLuint object);
1029 void extGlDeleteShader(GLuint shader);
1030 void extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
1031 void extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders);
1032 void extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
1033 void extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
1034 void extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
1035 void extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param);
1036 void extGlGetShaderiv(GLuint shader, GLenum type, GLint *param);
1037 void extGlGetProgramiv(GLuint program, GLenum type, GLint *param);
1038 GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
1039 GLint extGlGetUniformLocation(GLuint program, const char *name);
1040 void extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v);
1041 void extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v);
1042 void extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v);
1043 void extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v);
1044 void extGlUniform1bv(GLint loc, GLsizei count, const bool *v);
1045 void extGlUniform2bv(GLint loc, GLsizei count, const bool *v);
1046 void extGlUniform3bv(GLint loc, GLsizei count, const bool *v);
1047 void extGlUniform4bv(GLint loc, GLsizei count, const bool *v);
1048 void extGlUniform1iv(GLint loc, GLsizei count, const GLint *v);
1049 void extGlUniform2iv(GLint loc, GLsizei count, const GLint *v);
1050 void extGlUniform3iv(GLint loc, GLsizei count, const GLint *v);
1051 void extGlUniform4iv(GLint loc, GLsizei count, const GLint *v);
1052 void extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
1053 void extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
1054 void extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
1055 void extGlGetActiveUniformARB(GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
1056 void extGlGetActiveUniform(GLuint program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
1057
1058 // framebuffer objects
1059 void extGlBindFramebuffer(GLenum target, GLuint framebuffer);
1060 void extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
1061 void extGlGenFramebuffers(GLsizei n, GLuint *framebuffers);
1062 GLenum extGlCheckFramebufferStatus(GLenum target);
1063 void extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
1064 void extGlBindRenderbuffer(GLenum target, GLuint renderbuffer);
1065 void extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers);
1066 void extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers);
1067 void extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
1068 void extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
1069 void extGlGenerateMipmap(GLenum target);
1070 void extGlActiveStencilFace(GLenum face);
1071 void extGlDrawBuffers(GLsizei n, const GLenum *bufs);
1072
1073 // vertex buffer object
1074 void extGlGenBuffers(GLsizei n, GLuint *buffers);
1075 void extGlBindBuffer(GLenum target, GLuint buffer);
1076 void extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
1077 void extGlDeleteBuffers(GLsizei n, const GLuint *buffers);
1078 void extGlBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
1079 void extGlGetBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
1080 void *extGlMapBuffer (GLenum target, GLenum access);
1081 GLboolean extGlUnmapBuffer (GLenum target);
1082 GLboolean extGlIsBuffer (GLuint buffer);
1083 void extGlGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
1084 void extGlGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);
1085 void extGlProvokingVertex(GLenum mode);
1086 void extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
1087 void extGlEnableIndexed(GLenum target, GLuint index);
1088 void extGlDisableIndexed(GLenum target, GLuint index);
1089 void extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst);
1090 void extGlBlendEquationIndexed(GLuint buf, GLenum mode);
1091 void extGlProgramParameteri(GLhandleARB program, GLenum pname, GLint value);
1092
1093 // occlusion query
1094 void extGlGenQueries(GLsizei n, GLuint *ids);
1095 void extGlDeleteQueries(GLsizei n, const GLuint *ids);
1096 GLboolean extGlIsQuery(GLuint id);
1097 void extGlBeginQuery(GLenum target, GLuint id);
1098 void extGlEndQuery(GLenum target);
1099 void extGlGetQueryiv(GLenum target, GLenum pname, GLint *params);
1100 void extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
1101 void extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
1102
1103 // generic vsync setting method for several extensions
1104 void extGlSwapInterval(int interval);
1105
1106 // blend operations
1107 void extGlBlendEquation(GLenum mode);
1108
1109 // the global feature array
1110 bool FeatureAvailable[IRR_OpenGL_Feature_Count];
1111
1112 protected:
1113 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
1114 PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
1115 PFNGLCLIENTACTIVETEXTUREARBPROC pGlClientActiveTextureARB;
1116 PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
1117 PFNGLGENPROGRAMSNVPROC pGlGenProgramsNV;
1118 PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
1119 PFNGLBINDPROGRAMNVPROC pGlBindProgramNV;
1120 PFNGLDELETEPROGRAMSARBPROC pGlDeleteProgramsARB;
1121 PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsNV;
1122 PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
1123 PFNGLLOADPROGRAMNVPROC pGlLoadProgramNV;
1124 PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
1125 PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
1126 PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
1127 PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
1128 PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
1129 PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
1130 PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
1131 PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
1132 PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
1133 PFNGLCREATEPROGRAMPROC pGlCreateProgram;
1134 PFNGLUSEPROGRAMPROC pGlUseProgram;
1135 PFNGLDELETEPROGRAMPROC pGlDeleteProgram;
1136 PFNGLDELETESHADERPROC pGlDeleteShader;
1137 PFNGLGETATTACHEDOBJECTSARBPROC pGlGetAttachedObjectsARB;
1138 PFNGLGETATTACHEDSHADERSPROC pGlGetAttachedShaders;
1139 PFNGLCREATESHADERPROC pGlCreateShader;
1140 PFNGLSHADERSOURCEPROC pGlShaderSource;
1141 PFNGLCOMPILESHADERPROC pGlCompileShader;
1142 PFNGLATTACHSHADERPROC pGlAttachShader;
1143 PFNGLLINKPROGRAMPROC pGlLinkProgram;
1144 PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
1145 PFNGLGETSHADERINFOLOGPROC pGlGetShaderInfoLog;
1146 PFNGLGETPROGRAMINFOLOGPROC pGlGetProgramInfoLog;
1147 PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
1148 PFNGLGETSHADERIVPROC pGlGetShaderiv;
1149 PFNGLGETSHADERIVPROC pGlGetProgramiv;
1150 PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
1151 PFNGLGETUNIFORMLOCATIONPROC pGlGetUniformLocation;
1152 PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
1153 PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
1154 PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
1155 PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
1156 PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
1157 PFNGLUNIFORM2IVARBPROC pGlUniform2ivARB;
1158 PFNGLUNIFORM3IVARBPROC pGlUniform3ivARB;
1159 PFNGLUNIFORM4IVARBPROC pGlUniform4ivARB;
1160 PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
1161 PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
1162 PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
1163 PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
1164 PFNGLGETACTIVEUNIFORMPROC pGlGetActiveUniform;
1165 PFNGLPOINTPARAMETERFARBPROC pGlPointParameterfARB;
1166 PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
1167 PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
1168 PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
1169 PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
1170 PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
1171 PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
1172 // ARB framebuffer object
1173 PFNGLBINDFRAMEBUFFERPROC pGlBindFramebuffer;
1174 PFNGLDELETEFRAMEBUFFERSPROC pGlDeleteFramebuffers;
1175 PFNGLGENFRAMEBUFFERSPROC pGlGenFramebuffers;
1176 PFNGLCHECKFRAMEBUFFERSTATUSPROC pGlCheckFramebufferStatus;
1177 PFNGLFRAMEBUFFERTEXTURE2DPROC pGlFramebufferTexture2D;
1178 PFNGLBINDRENDERBUFFERPROC pGlBindRenderbuffer;
1179 PFNGLDELETERENDERBUFFERSPROC pGlDeleteRenderbuffers;
1180 PFNGLGENRENDERBUFFERSPROC pGlGenRenderbuffers;
1181 PFNGLRENDERBUFFERSTORAGEPROC pGlRenderbufferStorage;
1182 PFNGLFRAMEBUFFERRENDERBUFFERPROC pGlFramebufferRenderbuffer;
1183 PFNGLGENERATEMIPMAPPROC pGlGenerateMipmap;
1184 // EXT framebuffer object
1185 PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
1186 PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
1187 PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
1188 PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
1189 PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
1190 PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
1191 PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
1192 PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
1193 PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
1194 PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
1195 PFNGLGENERATEMIPMAPEXTPROC pGlGenerateMipmapEXT;
1196 PFNGLACTIVESTENCILFACEEXTPROC pGlActiveStencilFaceEXT;
1197 PFNGLDRAWBUFFERSARBPROC pGlDrawBuffersARB;
1198 PFNGLDRAWBUFFERSATIPROC pGlDrawBuffersATI;
1199 PFNGLGENBUFFERSARBPROC pGlGenBuffersARB;
1200 PFNGLBINDBUFFERARBPROC pGlBindBufferARB;
1201 PFNGLBUFFERDATAARBPROC pGlBufferDataARB;
1202 PFNGLDELETEBUFFERSARBPROC pGlDeleteBuffersARB;
1203 PFNGLBUFFERSUBDATAARBPROC pGlBufferSubDataARB;
1204 PFNGLGETBUFFERSUBDATAARBPROC pGlGetBufferSubDataARB;
1205 PFNGLMAPBUFFERARBPROC pGlMapBufferARB;
1206 PFNGLUNMAPBUFFERARBPROC pGlUnmapBufferARB;
1207 PFNGLISBUFFERARBPROC pGlIsBufferARB;
1208 PFNGLGETBUFFERPARAMETERIVARBPROC pGlGetBufferParameterivARB;
1209 PFNGLGETBUFFERPOINTERVARBPROC pGlGetBufferPointervARB;
1210 PFNGLPROVOKINGVERTEXPROC pGlProvokingVertexARB;
1211 PFNGLPROVOKINGVERTEXEXTPROC pGlProvokingVertexEXT;
1212 PFNGLCOLORMASKINDEXEDEXTPROC pGlColorMaskIndexedEXT;
1213 PFNGLENABLEINDEXEDEXTPROC pGlEnableIndexedEXT;
1214 PFNGLDISABLEINDEXEDEXTPROC pGlDisableIndexedEXT;
1215 PFNGLBLENDFUNCINDEXEDAMDPROC pGlBlendFuncIndexedAMD;
1216 PFNGLBLENDFUNCIPROC pGlBlendFunciARB;
1217 PFNGLBLENDEQUATIONINDEXEDAMDPROC pGlBlendEquationIndexedAMD;
1218 PFNGLBLENDEQUATIONIPROC pGlBlendEquationiARB;
1219 PFNGLPROGRAMPARAMETERIARBPROC pGlProgramParameteriARB;
1220 PFNGLPROGRAMPARAMETERIEXTPROC pGlProgramParameteriEXT;
1221 PFNGLGENQUERIESARBPROC pGlGenQueriesARB;
1222 PFNGLDELETEQUERIESARBPROC pGlDeleteQueriesARB;
1223 PFNGLISQUERYARBPROC pGlIsQueryARB;
1224 PFNGLBEGINQUERYARBPROC pGlBeginQueryARB;
1225 PFNGLENDQUERYARBPROC pGlEndQueryARB;
1226 PFNGLGETQUERYIVARBPROC pGlGetQueryivARB;
1227 PFNGLGETQUERYOBJECTIVARBPROC pGlGetQueryObjectivARB;
1228 PFNGLGETQUERYOBJECTUIVARBPROC pGlGetQueryObjectuivARB;
1229 PFNGLGENOCCLUSIONQUERIESNVPROC pGlGenOcclusionQueriesNV;
1230 PFNGLDELETEOCCLUSIONQUERIESNVPROC pGlDeleteOcclusionQueriesNV;
1231 PFNGLISOCCLUSIONQUERYNVPROC pGlIsOcclusionQueryNV;
1232 PFNGLBEGINOCCLUSIONQUERYNVPROC pGlBeginOcclusionQueryNV;
1233 PFNGLENDOCCLUSIONQUERYNVPROC pGlEndOcclusionQueryNV;
1234 PFNGLGETOCCLUSIONQUERYIVNVPROC pGlGetOcclusionQueryivNV;
1235 PFNGLGETOCCLUSIONQUERYUIVNVPROC pGlGetOcclusionQueryuivNV;
1236 PFNGLBLENDEQUATIONEXTPROC pGlBlendEquationEXT;
1237 PFNGLBLENDEQUATIONPROC pGlBlendEquation;
1238 #if defined(WGL_EXT_swap_control)
1239 PFNWGLSWAPINTERVALEXTPROC pWglSwapIntervalEXT;
1240 #endif
1241 #if defined(GLX_SGI_swap_control)
1242 PFNGLXSWAPINTERVALSGIPROC pGlxSwapIntervalSGI;
1243 #endif
1244 #if defined(GLX_EXT_swap_control)
1245 PFNGLXSWAPINTERVALEXTPROC pGlxSwapIntervalEXT;
1246 #endif
1247 #if defined(GLX_MESA_swap_control)
1248 PFNGLXSWAPINTERVALMESAPROC pGlxSwapIntervalMESA;
1249 #endif
1250 #endif
1251};
1252
1253inline void COpenGLExtensionHandler::extGlActiveTexture(GLenum texture)
1254{
1255#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1256 if (MultiTextureExtension && pGlActiveTextureARB)
1257 pGlActiveTextureARB(texture);
1258#else
1259 if (MultiTextureExtension)
1260#ifdef GL_ARB_multitexture
1261 glActiveTextureARB(texture);
1262#else
1263 glActiveTexture(texture);
1264#endif
1265#endif
1266}
1267
1268inline void COpenGLExtensionHandler::extGlClientActiveTexture(GLenum texture)
1269{
1270#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1271 if (MultiTextureExtension && pGlClientActiveTextureARB)
1272 pGlClientActiveTextureARB(texture);
1273#else
1274 if (MultiTextureExtension)
1275 glClientActiveTextureARB(texture);
1276#endif
1277}
1278
1279inline void COpenGLExtensionHandler::extGlGenPrograms(GLsizei n, GLuint *programs)
1280{
1281 if (programs)
1282 memset(programs,0,n*sizeof(GLuint));
1283#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1284 if (pGlGenProgramsARB)
1285 pGlGenProgramsARB(n, programs);
1286 else if (pGlGenProgramsNV)
1287 pGlGenProgramsNV(n, programs);
1288#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
1289 glGenProgramsARB(n,programs);
1290#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
1291 glGenProgramsNV(n,programs);
1292#else
1293 os::Printer::log("glGenPrograms not supported", ELL_ERROR);
1294#endif
1295}
1296
1297inline void COpenGLExtensionHandler::extGlBindProgram(GLenum target, GLuint program)
1298{
1299#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1300 if (pGlBindProgramARB)
1301 pGlBindProgramARB(target, program);
1302 else if (pGlBindProgramNV)
1303 pGlBindProgramNV(target, program);
1304#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
1305 glBindProgramARB(target, program);
1306#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
1307 glBindProgramNV(target, program);
1308#else
1309 os::Printer::log("glBindProgram not supported", ELL_ERROR);
1310#endif
1311}
1312
1313inline void COpenGLExtensionHandler::extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string)
1314{
1315#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1316 if (pGlProgramStringARB)
1317 pGlProgramStringARB(target, format, len, string);
1318#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
1319 glProgramStringARB(target,format,len,string);
1320#else
1321 os::Printer::log("glProgramString not supported", ELL_ERROR);
1322#endif
1323}
1324
1325inline void COpenGLExtensionHandler::extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string)
1326{
1327#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1328 if (pGlLoadProgramNV)
1329 pGlLoadProgramNV(target, id, len, string);
1330#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
1331 glLoadProgramNV(target,id,len,string);
1332#else
1333 os::Printer::log("glLoadProgram not supported", ELL_ERROR);
1334#endif
1335}
1336
1337inline void COpenGLExtensionHandler::extGlDeletePrograms(GLsizei n, const GLuint *programs)
1338{
1339#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1340 if (pGlDeleteProgramsARB)
1341 pGlDeleteProgramsARB(n, programs);
1342 else if (pGlDeleteProgramsNV)
1343 pGlDeleteProgramsNV(n, programs);
1344#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
1345 glDeleteProgramsARB(n,programs);
1346#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
1347 glDeleteProgramsNV(n,programs);
1348#else
1349 os::Printer::log("glDeletePrograms not supported", ELL_ERROR);
1350#endif
1351}
1352
1353inline void COpenGLExtensionHandler::extGlProgramLocalParameter4fv(GLenum n, GLuint i, const GLfloat *f)
1354{
1355#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1356 if (pGlProgramLocalParameter4fvARB)
1357 pGlProgramLocalParameter4fvARB(n,i,f);
1358#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
1359 glProgramLocalParameter4fvARB(n,i,f);
1360#else
1361 os::Printer::log("glProgramLocalParameter4fv not supported", ELL_ERROR);
1362#endif
1363}
1364
1365inline GLhandleARB COpenGLExtensionHandler::extGlCreateShaderObject(GLenum shaderType)
1366{
1367#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1368 if (pGlCreateShaderObjectARB)
1369 return pGlCreateShaderObjectARB(shaderType);
1370#elif defined(GL_ARB_shader_objects)
1371 return glCreateShaderObjectARB(shaderType);
1372#else
1373 os::Printer::log("glCreateShaderObject not supported", ELL_ERROR);
1374#endif
1375 return 0;
1376}
1377
1378inline GLuint COpenGLExtensionHandler::extGlCreateShader(GLenum shaderType)
1379{
1380#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1381 if (pGlCreateShader)
1382 return pGlCreateShader(shaderType);
1383#elif defined(GL_VERSION_2_0)
1384 return glCreateShader(shaderType);
1385#else
1386 os::Printer::log("glCreateShader not supported", ELL_ERROR);
1387#endif
1388 return 0;
1389}
1390
1391inline void COpenGLExtensionHandler::extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
1392{
1393#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1394 if (pGlShaderSourceARB)
1395 pGlShaderSourceARB(shader, numOfStrings, strings, lenOfStrings);
1396#elif defined(GL_ARB_shader_objects)
1397 glShaderSourceARB(shader, numOfStrings, strings, (GLint *)lenOfStrings);
1398#else
1399 os::Printer::log("glShaderSource not supported", ELL_ERROR);
1400#endif
1401}
1402
1403inline void COpenGLExtensionHandler::extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
1404{
1405#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1406 if (pGlShaderSource)
1407 pGlShaderSource(shader, numOfStrings, strings, lenOfStrings);
1408#elif defined(GL_VERSION_2_0)
1409 glShaderSource(shader, numOfStrings, strings, (GLint *)lenOfStrings);
1410#else
1411 os::Printer::log("glShaderSource not supported", ELL_ERROR);
1412#endif
1413}
1414
1415inline void COpenGLExtensionHandler::extGlCompileShaderARB(GLhandleARB shader)
1416{
1417#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1418 if (pGlCompileShaderARB)
1419 pGlCompileShaderARB(shader);
1420#elif defined(GL_ARB_shader_objects)
1421 glCompileShaderARB(shader);
1422#else
1423 os::Printer::log("glCompileShader not supported", ELL_ERROR);
1424#endif
1425}
1426
1427inline void COpenGLExtensionHandler::extGlCompileShader(GLuint shader)
1428{
1429#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1430 if (pGlCompileShader)
1431 pGlCompileShader(shader);
1432#elif defined(GL_VERSION_2_0)
1433 glCompileShader(shader);
1434#else
1435 os::Printer::log("glCompileShader not supported", ELL_ERROR);
1436#endif
1437}
1438
1439inline GLhandleARB COpenGLExtensionHandler::extGlCreateProgramObject(void)
1440{
1441#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1442 if (pGlCreateProgramObjectARB)
1443 return pGlCreateProgramObjectARB();
1444#elif defined(GL_ARB_shader_objects)
1445 return glCreateProgramObjectARB();
1446#else
1447 os::Printer::log("glCreateProgramObject not supported", ELL_ERROR);
1448#endif
1449 return 0;
1450}
1451
1452inline GLuint COpenGLExtensionHandler::extGlCreateProgram(void)
1453{
1454#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1455 if (pGlCreateProgram)
1456 return pGlCreateProgram();
1457#elif defined(GL_VERSION_2_0)
1458 return glCreateProgram();
1459#else
1460 os::Printer::log("glCreateProgram not supported", ELL_ERROR);
1461#endif
1462 return 0;
1463}
1464
1465inline void COpenGLExtensionHandler::extGlAttachObject(GLhandleARB program, GLhandleARB shader)
1466{
1467#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1468 if (pGlAttachObjectARB)
1469 pGlAttachObjectARB(program, shader);
1470#elif defined(GL_ARB_shader_objects)
1471 glAttachObjectARB(program, shader);
1472#else
1473 os::Printer::log("glAttachObject not supported", ELL_ERROR);
1474#endif
1475}
1476
1477inline void COpenGLExtensionHandler::extGlAttachShader(GLuint program, GLuint shader)
1478{
1479#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1480 if (pGlAttachShader)
1481 pGlAttachShader(program, shader);
1482#elif defined(GL_VERSION_2_0)
1483 glAttachShader(program, shader);
1484#else
1485 os::Printer::log("glAttachShader not supported", ELL_ERROR);
1486#endif
1487}
1488
1489inline void COpenGLExtensionHandler::extGlLinkProgramARB(GLhandleARB program)
1490{
1491#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1492 if (pGlLinkProgramARB)
1493 pGlLinkProgramARB(program);
1494#elif defined(GL_ARB_shader_objects)
1495 glLinkProgramARB(program);
1496#else
1497 os::Printer::log("glLinkProgram not supported", ELL_ERROR);
1498#endif
1499}
1500
1501inline void COpenGLExtensionHandler::extGlLinkProgram(GLuint program)
1502{
1503#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1504 if (pGlLinkProgram)
1505 pGlLinkProgram(program);
1506#elif defined(GL_VERSION_2_0)
1507 glLinkProgram(program);
1508#else
1509 os::Printer::log("glLinkProgram not supported", ELL_ERROR);
1510#endif
1511}
1512
1513inline void COpenGLExtensionHandler::extGlUseProgramObject(GLhandleARB prog)
1514{
1515#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1516 if (pGlUseProgramObjectARB)
1517 pGlUseProgramObjectARB(prog);
1518#elif defined(GL_ARB_shader_objects)
1519 glUseProgramObjectARB(prog);
1520#else
1521 os::Printer::log("glUseProgramObject not supported", ELL_ERROR);
1522#endif
1523}
1524
1525inline void COpenGLExtensionHandler::extGlUseProgram(GLuint prog)
1526{
1527#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1528 if (pGlUseProgram)
1529 pGlUseProgram(prog);
1530#elif defined(GL_VERSION_2_0)
1531 glUseProgram(prog);
1532#else
1533 os::Printer::log("glUseProgram not supported", ELL_ERROR);
1534#endif
1535}
1536
1537inline void COpenGLExtensionHandler::extGlDeleteObject(GLhandleARB object)
1538{
1539#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1540 if (pGlDeleteObjectARB)
1541 pGlDeleteObjectARB(object);
1542#elif defined(GL_ARB_shader_objects)
1543 glDeleteObjectARB(object);
1544#else
1545 os::Printer::log("glDeleteObject not supported", ELL_ERROR);
1546#endif
1547}
1548
1549inline void COpenGLExtensionHandler::extGlDeleteProgram(GLuint object)
1550{
1551#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1552 if (pGlDeleteProgram)
1553 pGlDeleteProgram(object);
1554#elif defined(GL_VERSION_2_0)
1555 glDeleteProgram(object);
1556#else
1557 os::Printer::log("glDeleteProgram not supported", ELL_ERROR);
1558#endif
1559}
1560
1561inline void COpenGLExtensionHandler::extGlDeleteShader(GLuint shader)
1562{
1563#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1564 if (pGlDeleteShader)
1565 pGlDeleteShader(shader);
1566#elif defined(GL_VERSION_2_0)
1567 glDeleteShader(shader);
1568#else
1569 os::Printer::log("glDeleteShader not supported", ELL_ERROR);
1570#endif
1571}
1572
1573inline void COpenGLExtensionHandler::extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders)
1574{
1575 if (count)
1576 *count=0;
1577#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1578 if (pGlGetAttachedObjectsARB)
1579 pGlGetAttachedObjectsARB(program, maxcount, count, shaders);
1580#elif defined(GL_ARB_shader_objects)
1581 glGetAttachedObjectsARB(program, maxcount, count, shaders);
1582#else
1583 os::Printer::log("glGetAttachedObjects not supported", ELL_ERROR);
1584#endif
1585}
1586
1587inline void COpenGLExtensionHandler::extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
1588{
1589 if (count)
1590 *count=0;
1591#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1592 if (pGlGetAttachedShaders)
1593 pGlGetAttachedShaders(program, maxcount, count, shaders);
1594#elif defined(GL_VERSION_2_0)
1595 glGetAttachedShaders(program, maxcount, count, shaders);
1596#else
1597 os::Printer::log("glGetAttachedShaders not supported", ELL_ERROR);
1598#endif
1599}
1600
1601inline void COpenGLExtensionHandler::extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog)
1602{
1603 if (length)
1604 *length=0;
1605#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1606 if (pGlGetInfoLogARB)
1607 pGlGetInfoLogARB(object, maxLength, length, infoLog);
1608#elif defined(GL_ARB_shader_objects)
1609 glGetInfoLogARB(object, maxLength, length, infoLog);
1610#else
1611 os::Printer::log("glGetInfoLog not supported", ELL_ERROR);
1612#endif
1613}
1614
1615inline void COpenGLExtensionHandler::extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
1616{
1617 if (length)
1618 *length=0;
1619#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1620 if (pGlGetShaderInfoLog)
1621 pGlGetShaderInfoLog(shader, maxLength, length, infoLog);
1622#elif defined(GL_VERSION_2_0)
1623 glGetShaderInfoLog(shader, maxLength, length, infoLog);
1624#else
1625 os::Printer::log("glGetShaderInfoLog not supported", ELL_ERROR);
1626#endif
1627}
1628
1629inline void COpenGLExtensionHandler::extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
1630{
1631 if (length)
1632 *length=0;
1633#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1634 if (pGlGetProgramInfoLog)
1635 pGlGetProgramInfoLog(program, maxLength, length, infoLog);
1636#elif defined(GL_VERSION_2_0)
1637 glGetProgramInfoLog(program, maxLength, length, infoLog);
1638#else
1639 os::Printer::log("glGetProgramInfoLog not supported", ELL_ERROR);
1640#endif
1641}
1642
1643inline void COpenGLExtensionHandler::extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param)
1644{
1645#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1646 if (pGlGetObjectParameterivARB)
1647 pGlGetObjectParameterivARB(object, type, param);
1648#elif defined(GL_ARB_shader_objects)
1649 glGetObjectParameterivARB(object, type, param);
1650#else
1651 os::Printer::log("glGetObjectParameteriv not supported", ELL_ERROR);
1652#endif
1653}
1654
1655inline void COpenGLExtensionHandler::extGlGetShaderiv(GLuint shader, GLenum type, GLint *param)
1656{
1657#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1658 if (pGlGetShaderiv)
1659 pGlGetShaderiv(shader, type, param);
1660#elif defined(GL_VERSION_2_0)
1661 glGetShaderiv(shader, type, param);
1662#else
1663 os::Printer::log("glGetShaderiv not supported", ELL_ERROR);
1664#endif
1665}
1666
1667inline void COpenGLExtensionHandler::extGlGetProgramiv(GLuint program, GLenum type, GLint *param)
1668{
1669#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1670 if (pGlGetProgramiv)
1671 pGlGetProgramiv(program, type, param);
1672#elif defined(GL_VERSION_2_0)
1673 glGetProgramiv(program, type, param);
1674#else
1675 os::Printer::log("glGetProgramiv not supported", ELL_ERROR);
1676#endif
1677}
1678
1679inline GLint COpenGLExtensionHandler::extGlGetUniformLocationARB(GLhandleARB program, const char *name)
1680{
1681#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1682 if (pGlGetUniformLocationARB)
1683 return pGlGetUniformLocationARB(program, name);
1684#elif defined(GL_ARB_shader_objects)
1685 return glGetUniformLocationARB(program, name);
1686#else
1687 os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
1688#endif
1689 return 0;
1690}
1691
1692inline GLint COpenGLExtensionHandler::extGlGetUniformLocation(GLuint program, const char *name)
1693{
1694#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1695 if (pGlGetUniformLocation)
1696 return pGlGetUniformLocation(program, name);
1697#elif defined(GL_VERSION_2_0)
1698 return glGetUniformLocation(program, name);
1699#else
1700 os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
1701#endif
1702 return 0;
1703}
1704
1705inline void COpenGLExtensionHandler::extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v)
1706{
1707#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1708 if (pGlUniform1fvARB)
1709 pGlUniform1fvARB(loc, count, v);
1710#elif defined(GL_ARB_shader_objects)
1711 glUniform1fvARB(loc, count, v);
1712#else
1713 os::Printer::log("glUniform1fv not supported", ELL_ERROR);
1714#endif
1715}
1716
1717inline void COpenGLExtensionHandler::extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v)
1718{
1719#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1720 if (pGlUniform2fvARB)
1721 pGlUniform2fvARB(loc, count, v);
1722#elif defined(GL_ARB_shader_objects)
1723 glUniform2fvARB(loc, count, v);
1724#else
1725 os::Printer::log("glUniform2fv not supported", ELL_ERROR);
1726#endif
1727}
1728
1729inline void COpenGLExtensionHandler::extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v)
1730{
1731#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1732 if (pGlUniform3fvARB)
1733 pGlUniform3fvARB(loc, count, v);
1734#elif defined(GL_ARB_shader_objects)
1735 glUniform3fvARB(loc, count, v);
1736#else
1737 os::Printer::log("glUniform3fv not supported", ELL_ERROR);
1738#endif
1739}
1740
1741inline void COpenGLExtensionHandler::extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v)
1742{
1743#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1744 if (pGlUniform4fvARB)
1745 pGlUniform4fvARB(loc, count, v);
1746#elif defined(GL_ARB_shader_objects)
1747 glUniform4fvARB(loc, count, v);
1748#else
1749 os::Printer::log("glUniform4fv not supported", ELL_ERROR);
1750#endif
1751}
1752
1753inline void COpenGLExtensionHandler::extGlUniform1iv(GLint loc, GLsizei count, const GLint *v)
1754{
1755#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1756 if (pGlUniform1ivARB)
1757 pGlUniform1ivARB(loc, count, v);
1758#elif defined(GL_ARB_shader_objects)
1759 glUniform1ivARB(loc, count, v);
1760#else
1761 os::Printer::log("glUniform1iv not supported", ELL_ERROR);
1762#endif
1763}
1764
1765inline void COpenGLExtensionHandler::extGlUniform2iv(GLint loc, GLsizei count, const GLint *v)
1766{
1767#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1768 if (pGlUniform2ivARB)
1769 pGlUniform2ivARB(loc, count, v);
1770#elif defined(GL_ARB_shader_objects)
1771 glUniform2ivARB(loc, count, v);
1772#else
1773 os::Printer::log("glUniform2iv not supported", ELL_ERROR);
1774#endif
1775}
1776
1777inline void COpenGLExtensionHandler::extGlUniform3iv(GLint loc, GLsizei count, const GLint *v)
1778{
1779#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1780 if (pGlUniform3ivARB)
1781 pGlUniform3ivARB(loc, count, v);
1782#elif defined(GL_ARB_shader_objects)
1783 glUniform3ivARB(loc, count, v);
1784#else
1785 os::Printer::log("glUniform3iv not supported", ELL_ERROR);
1786#endif
1787}
1788
1789inline void COpenGLExtensionHandler::extGlUniform4iv(GLint loc, GLsizei count, const GLint *v)
1790{
1791#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1792 if (pGlUniform4ivARB)
1793 pGlUniform4ivARB(loc, count, v);
1794#elif defined(GL_ARB_shader_objects)
1795 glUniform4ivARB(loc, count, v);
1796#else
1797 os::Printer::log("glUniform4iv not supported", ELL_ERROR);
1798#endif
1799}
1800
1801inline void COpenGLExtensionHandler::extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
1802{
1803#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1804 if (pGlUniformMatrix2fvARB)
1805 pGlUniformMatrix2fvARB(loc, count, transpose, v);
1806#elif defined(GL_ARB_shader_objects)
1807 glUniformMatrix2fvARB(loc, count, transpose, v);
1808#else
1809 os::Printer::log("glUniformMatrix2fv not supported", ELL_ERROR);
1810#endif
1811}
1812
1813inline void COpenGLExtensionHandler::extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
1814{
1815#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1816 if (pGlUniformMatrix3fvARB)
1817 pGlUniformMatrix3fvARB(loc, count, transpose, v);
1818#elif defined(GL_ARB_shader_objects)
1819 glUniformMatrix3fvARB(loc, count, transpose, v);
1820#else
1821 os::Printer::log("glUniformMatrix3fv not supported", ELL_ERROR);
1822#endif
1823}
1824
1825inline void COpenGLExtensionHandler::extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
1826{
1827#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1828 if (pGlUniformMatrix4fvARB)
1829 pGlUniformMatrix4fvARB(loc, count, transpose, v);
1830#elif defined(GL_ARB_shader_objects)
1831 glUniformMatrix4fvARB(loc, count, transpose, v);
1832#else
1833 os::Printer::log("glUniformMatrix4fv not supported", ELL_ERROR);
1834#endif
1835}
1836
1837inline void COpenGLExtensionHandler::extGlGetActiveUniformARB(GLhandleARB program,
1838 GLuint index, GLsizei maxlength, GLsizei *length,
1839 GLint *size, GLenum *type, GLcharARB *name)
1840{
1841 if (length)
1842 *length=0;
1843#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1844 if (pGlGetActiveUniformARB)
1845 pGlGetActiveUniformARB(program, index, maxlength, length, size, type, name);
1846#elif defined(GL_ARB_shader_objects)
1847 glGetActiveUniformARB(program, index, maxlength, length, size, type, name);
1848#else
1849 os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
1850#endif
1851}
1852
1853inline void COpenGLExtensionHandler::extGlGetActiveUniform(GLuint program,
1854 GLuint index, GLsizei maxlength, GLsizei *length,
1855 GLint *size, GLenum *type, GLchar *name)
1856{
1857 if (length)
1858 *length=0;
1859#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1860 if (pGlGetActiveUniform)
1861 pGlGetActiveUniform(program, index, maxlength, length, size, type, name);
1862#elif defined(GL_VERSION_2_0)
1863 glGetActiveUniform(program, index, maxlength, length, size, type, name);
1864#else
1865 os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
1866#endif
1867}
1868
1869inline void COpenGLExtensionHandler::extGlPointParameterf(GLint loc, GLfloat f)
1870{
1871#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1872 if (pGlPointParameterfARB)
1873 pGlPointParameterfARB(loc, f);
1874#elif defined(GL_ARB_point_parameters)
1875 glPointParameterfARB(loc, f);
1876#else
1877 os::Printer::log("glPointParameterf not supported", ELL_ERROR);
1878#endif
1879}
1880
1881inline void COpenGLExtensionHandler::extGlPointParameterfv(GLint loc, const GLfloat *v)
1882{
1883#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1884 if (pGlPointParameterfvARB)
1885 pGlPointParameterfvARB(loc, v);
1886#elif defined(GL_ARB_point_parameters)
1887 glPointParameterfvARB(loc, v);
1888#else
1889 os::Printer::log("glPointParameterfv not supported", ELL_ERROR);
1890#endif
1891}
1892
1893inline void COpenGLExtensionHandler::extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
1894{
1895#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1896 if (pGlStencilFuncSeparate)
1897 pGlStencilFuncSeparate(frontfunc, backfunc, ref, mask);
1898 else if (pGlStencilFuncSeparateATI)
1899 pGlStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
1900#elif defined(GL_VERSION_2_0)
1901 glStencilFuncSeparate(frontfunc, backfunc, ref, mask);
1902#elif defined(GL_ATI_separate_stencil)
1903 glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
1904#else
1905 os::Printer::log("glStencilFuncSeparate not supported", ELL_ERROR);
1906#endif
1907}
1908
1909inline void COpenGLExtensionHandler::extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
1910{
1911#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1912 if (pGlStencilOpSeparate)
1913 pGlStencilOpSeparate(face, fail, zfail, zpass);
1914 else if (pGlStencilOpSeparateATI)
1915 pGlStencilOpSeparateATI(face, fail, zfail, zpass);
1916#elif defined(GL_VERSION_2_0)
1917 glStencilOpSeparate(face, fail, zfail, zpass);
1918#elif defined(GL_ATI_separate_stencil)
1919 glStencilOpSeparateATI(face, fail, zfail, zpass);
1920#else
1921 os::Printer::log("glStencilOpSeparate not supported", ELL_ERROR);
1922#endif
1923}
1924
1925inline void COpenGLExtensionHandler::extGlCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width,
1926 GLsizei height, GLint border, GLsizei imageSize, const void* data)
1927{
1928#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1929 if (pGlCompressedTexImage2D)
1930 pGlCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
1931#elif defined(GL_ARB_texture_compression)
1932 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
1933#else
1934 os::Printer::log("glCompressedTexImage2D not supported", ELL_ERROR);
1935#endif
1936}
1937
1938inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint framebuffer)
1939{
1940#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1941 if (pGlBindFramebuffer)
1942 pGlBindFramebuffer(target, framebuffer);
1943 else if (pGlBindFramebufferEXT)
1944 pGlBindFramebufferEXT(target, framebuffer);
1945#elif defined(GL_ARB_framebuffer_object)
1946 glBindFramebuffer(target, framebuffer);
1947#elif defined(GL_EXT_framebuffer_object)
1948 glBindFramebufferEXT(target, framebuffer);
1949#else
1950 os::Printer::log("glBindFramebuffer not supported", ELL_ERROR);
1951#endif
1952}
1953
1954inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
1955{
1956#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1957 if (pGlDeleteFramebuffers)
1958 pGlDeleteFramebuffers(n, framebuffers);
1959 else if (pGlDeleteFramebuffersEXT)
1960 pGlDeleteFramebuffersEXT(n, framebuffers);
1961#elif defined(GL_ARB_framebuffer_object)
1962 glDeleteFramebuffers(n, framebuffers);
1963#elif defined(GL_EXT_framebuffer_object)
1964 glDeleteFramebuffersEXT(n, framebuffers);
1965#else
1966 os::Printer::log("glDeleteFramebuffers not supported", ELL_ERROR);
1967#endif
1968}
1969
1970inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
1971{
1972 if (framebuffers)
1973 memset(framebuffers,0,n*sizeof(GLuint));
1974#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1975 if (pGlGenFramebuffers)
1976 pGlGenFramebuffers(n, framebuffers);
1977 else if (pGlGenFramebuffersEXT)
1978 pGlGenFramebuffersEXT(n, framebuffers);
1979#elif defined(GL_ARB_framebuffer_object)
1980 glGenFramebuffers(n, framebuffers);
1981#elif defined(GL_EXT_framebuffer_object)
1982 glGenFramebuffersEXT(n, framebuffers);
1983#else
1984 os::Printer::log("glGenFramebuffers not supported", ELL_ERROR);
1985#endif
1986}
1987
1988inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target)
1989{
1990#ifdef _IRR_OPENGL_USE_EXTPOINTER_
1991 if (pGlCheckFramebufferStatus)
1992 return pGlCheckFramebufferStatus(target);
1993 else if (pGlCheckFramebufferStatusEXT)
1994 return pGlCheckFramebufferStatusEXT(target);
1995 else
1996 return 0;
1997#elif defined(GL_ARB_framebuffer_object)
1998 return glCheckFramebufferStatus(target);
1999#elif defined(GL_EXT_framebuffer_object)
2000 return glCheckFramebufferStatusEXT(target);
2001#else
2002 os::Printer::log("glCheckFramebufferStatus not supported", ELL_ERROR);
2003 return 0;
2004#endif
2005}
2006
2007inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
2008{
2009#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2010 if (pGlFramebufferTexture2D)
2011 pGlFramebufferTexture2D(target, attachment, textarget, texture, level);
2012 else if (pGlFramebufferTexture2DEXT)
2013 pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
2014#elif defined(GL_ARB_framebuffer_object)
2015 glFramebufferTexture2D(target, attachment, textarget, texture, level);
2016#elif defined(GL_EXT_framebuffer_object)
2017 glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
2018#else
2019 os::Printer::log("glFramebufferTexture2D not supported", ELL_ERROR);
2020#endif
2021}
2022
2023inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint renderbuffer)
2024{
2025#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2026 if (pGlBindRenderbuffer)
2027 pGlBindRenderbuffer(target, renderbuffer);
2028 else if (pGlBindRenderbufferEXT)
2029 pGlBindRenderbufferEXT(target, renderbuffer);
2030#elif defined(GL_ARB_framebuffer_object)
2031 glBindRenderbuffer(target, renderbuffer);
2032#elif defined(GL_EXT_framebuffer_object)
2033 glBindRenderbufferEXT(target, renderbuffer);
2034#else
2035 os::Printer::log("glBindRenderbuffer not supported", ELL_ERROR);
2036#endif
2037}
2038
2039inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
2040{
2041#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2042 if (pGlDeleteRenderbuffers)
2043 pGlDeleteRenderbuffers(n, renderbuffers);
2044 else if (pGlDeleteRenderbuffersEXT)
2045 pGlDeleteRenderbuffersEXT(n, renderbuffers);
2046#elif defined(GL_ARB_framebuffer_object)
2047 glDeleteRenderbuffers(n, renderbuffers);
2048#elif defined(GL_EXT_framebuffer_object)
2049 glDeleteRenderbuffersEXT(n, renderbuffers);
2050#else
2051 os::Printer::log("glDeleteRenderbuffers not supported", ELL_ERROR);
2052#endif
2053}
2054
2055inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
2056{
2057 if (renderbuffers)
2058 memset(renderbuffers,0,n*sizeof(GLuint));
2059#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2060 if (pGlGenRenderbuffers)
2061 pGlGenRenderbuffers(n, renderbuffers);
2062 else if (pGlGenRenderbuffersEXT)
2063 pGlGenRenderbuffersEXT(n, renderbuffers);
2064#elif defined(GL_ARB_framebuffer_object)
2065 glGenRenderbuffers(n, renderbuffers);
2066#elif defined(GL_EXT_framebuffer_object)
2067 glGenRenderbuffersEXT(n, renderbuffers);
2068#else
2069 os::Printer::log("glGenRenderbuffers not supported", ELL_ERROR);
2070#endif
2071}
2072
2073inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
2074{
2075#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2076 if (pGlRenderbufferStorage)
2077 pGlRenderbufferStorage(target, internalformat, width, height);
2078 else if (pGlRenderbufferStorageEXT)
2079 pGlRenderbufferStorageEXT(target, internalformat, width, height);
2080#elif defined(GL_ARB_framebuffer_object)
2081 glRenderbufferStorage(target, internalformat, width, height);
2082#elif defined(GL_EXT_framebuffer_object)
2083 glRenderbufferStorageEXT(target, internalformat, width, height);
2084#else
2085 os::Printer::log("glRenderbufferStorage not supported", ELL_ERROR);
2086#endif
2087}
2088
2089inline void COpenGLExtensionHandler::extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
2090{
2091#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2092 if (pGlFramebufferRenderbuffer)
2093 pGlFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
2094 else if (pGlFramebufferRenderbufferEXT)
2095 pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
2096#elif defined(GL_ARB_framebuffer_object)
2097 glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
2098#elif defined(GL_EXT_framebuffer_object)
2099 glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
2100#else
2101 os::Printer::log("glFramebufferRenderbuffer not supported", ELL_ERROR);
2102#endif
2103}
2104
2105inline void COpenGLExtensionHandler::extGlGenerateMipmap(GLenum target)
2106{
2107#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2108 if (pGlGenerateMipmap)
2109 pGlGenerateMipmap(target);
2110 else if (pGlGenerateMipmapEXT)
2111 pGlGenerateMipmapEXT(target);
2112#elif defined(GL_ARB_framebuffer_object)
2113 glGenerateMipmap(target);
2114#elif defined(GL_EXT_framebuffer_object)
2115 glGenerateMipmapEXT(target);
2116#else
2117 os::Printer::log("glGenerateMipmap not supported", ELL_ERROR);
2118#endif
2119}
2120
2121inline void COpenGLExtensionHandler::extGlActiveStencilFace(GLenum face)
2122{
2123#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2124 if (pGlActiveStencilFaceEXT)
2125 pGlActiveStencilFaceEXT(face);
2126#elif defined(GL_EXT_stencil_two_side)
2127 glActiveStencilFaceEXT(face);
2128#else
2129 os::Printer::log("glActiveStencilFace not supported", ELL_ERROR);
2130#endif
2131}
2132
2133inline void COpenGLExtensionHandler::extGlDrawBuffers(GLsizei n, const GLenum *bufs)
2134{
2135#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2136 if (pGlDrawBuffersARB)
2137 pGlDrawBuffersARB(n, bufs);
2138 else if (pGlDrawBuffersATI)
2139 pGlDrawBuffersATI(n, bufs);
2140#elif defined(GL_ARB_draw_buffers)
2141 glDrawBuffersARB(n, bufs);
2142#elif defined(GL_ATI_draw_buffers)
2143 glDrawBuffersATI(n, bufs);
2144#else
2145 os::Printer::log("glDrawBuffers not supported", ELL_ERROR);
2146#endif
2147}
2148
2149
2150inline void COpenGLExtensionHandler::extGlGenBuffers(GLsizei n, GLuint *buffers)
2151{
2152 if (buffers)
2153 memset(buffers,0,n*sizeof(GLuint));
2154#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2155 if (pGlGenBuffersARB)
2156 pGlGenBuffersARB(n, buffers);
2157#elif defined(GL_ARB_vertex_buffer_object)
2158 glGenBuffers(n, buffers);
2159#else
2160 os::Printer::log("glGenBuffers not supported", ELL_ERROR);
2161#endif
2162}
2163
2164inline void COpenGLExtensionHandler::extGlBindBuffer(GLenum target, GLuint buffer)
2165{
2166#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2167 if (pGlBindBufferARB)
2168 pGlBindBufferARB(target, buffer);
2169#elif defined(GL_ARB_vertex_buffer_object)
2170 glBindBuffer(target, buffer);
2171#else
2172 os::Printer::log("glBindBuffer not supported", ELL_ERROR);
2173#endif
2174}
2175
2176inline void COpenGLExtensionHandler::extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage)
2177{
2178#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2179 if (pGlBufferDataARB)
2180 pGlBufferDataARB(target, size, data, usage);
2181#elif defined(GL_ARB_vertex_buffer_object)
2182 glBufferData(target, size, data, usage);
2183#else
2184 os::Printer::log("glBufferData not supported", ELL_ERROR);
2185#endif
2186}
2187
2188inline void COpenGLExtensionHandler::extGlDeleteBuffers(GLsizei n, const GLuint *buffers)
2189{
2190#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2191 if (pGlDeleteBuffersARB)
2192 pGlDeleteBuffersARB(n, buffers);
2193#elif defined(GL_ARB_vertex_buffer_object)
2194 glDeleteBuffers(n, buffers);
2195#else
2196 os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
2197#endif
2198}
2199
2200inline void COpenGLExtensionHandler::extGlBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data)
2201{
2202#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2203 if (pGlBufferSubDataARB)
2204 pGlBufferSubDataARB(target, offset, size, data);
2205#elif defined(GL_ARB_vertex_buffer_object)
2206 glBufferSubData(target, offset, size, data);
2207#else
2208 os::Printer::log("glBufferSubData not supported", ELL_ERROR);
2209#endif
2210}
2211
2212inline void COpenGLExtensionHandler::extGlGetBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data)
2213{
2214#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2215 if (pGlGetBufferSubDataARB)
2216 pGlGetBufferSubDataARB(target, offset, size, data);
2217#elif defined(GL_ARB_vertex_buffer_object)
2218 glGetBufferSubData(target, offset, size, data);
2219#else
2220 os::Printer::log("glGetBufferSubData not supported", ELL_ERROR);
2221#endif
2222}
2223
2224inline void *COpenGLExtensionHandler::extGlMapBuffer(GLenum target, GLenum access)
2225{
2226#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2227 if (pGlMapBufferARB)
2228 return pGlMapBufferARB(target, access);
2229 return 0;
2230#elif defined(GL_ARB_vertex_buffer_object)
2231 return glMapBuffer(target, access);
2232#else
2233 os::Printer::log("glMapBuffer not supported", ELL_ERROR);
2234 return 0;
2235#endif
2236}
2237
2238inline GLboolean COpenGLExtensionHandler::extGlUnmapBuffer(GLenum target)
2239{
2240#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2241 if (pGlUnmapBufferARB)
2242 return pGlUnmapBufferARB(target);
2243 return false;
2244#elif defined(GL_ARB_vertex_buffer_object)
2245 return glUnmapBuffer(target);
2246#else
2247 os::Printer::log("glUnmapBuffer not supported", ELL_ERROR);
2248 return false;
2249#endif
2250}
2251
2252inline GLboolean COpenGLExtensionHandler::extGlIsBuffer(GLuint buffer)
2253{
2254#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2255 if (pGlIsBufferARB)
2256 return pGlIsBufferARB(buffer);
2257 return false;
2258#elif defined(GL_ARB_vertex_buffer_object)
2259 return glIsBuffer(buffer);
2260#else
2261 os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
2262 return false;
2263#endif
2264}
2265
2266inline void COpenGLExtensionHandler::extGlGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
2267{
2268#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2269 if (pGlGetBufferParameterivARB)
2270 pGlGetBufferParameterivARB(target, pname, params);
2271#elif defined(GL_ARB_vertex_buffer_object)
2272 glGetBufferParameteriv(target, pname, params);
2273#else
2274 os::Printer::log("glGetBufferParameteriv not supported", ELL_ERROR);
2275#endif
2276}
2277
2278inline void COpenGLExtensionHandler::extGlGetBufferPointerv(GLenum target, GLenum pname, GLvoid **params)
2279{
2280#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2281 if (pGlGetBufferPointervARB)
2282 pGlGetBufferPointervARB(target, pname, params);
2283#elif defined(GL_ARB_vertex_buffer_object)
2284 glGetBufferPointerv(target, pname, params);
2285#else
2286 os::Printer::log("glGetBufferPointerv not supported", ELL_ERROR);
2287#endif
2288}
2289
2290
2291inline void COpenGLExtensionHandler::extGlProvokingVertex(GLenum mode)
2292{
2293#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2294 if (FeatureAvailable[IRR_ARB_provoking_vertex] && pGlProvokingVertexARB)
2295 pGlProvokingVertexARB(mode);
2296 else if (FeatureAvailable[IRR_EXT_provoking_vertex] && pGlProvokingVertexEXT)
2297 pGlProvokingVertexEXT(mode);
2298#elif defined(GL_ARB_provoking_vertex)
2299 glProvokingVertex(mode);
2300#elif defined(GL_EXT_provoking_vertex)
2301 glProvokingVertexEXT(mode);
2302#else
2303 os::Printer::log("glProvokingVertex not supported", ELL_ERROR);
2304#endif
2305}
2306
2307
2308inline void COpenGLExtensionHandler::extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
2309{
2310#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2311 if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlColorMaskIndexedEXT)
2312 pGlColorMaskIndexedEXT(buf, r, g, b, a);
2313#elif defined(GL_EXT_draw_buffers2)
2314 glColorMaskIndexedEXT(buf, r, g, b, a);
2315#else
2316 os::Printer::log("glColorMaskIndexed not supported", ELL_ERROR);
2317#endif
2318}
2319
2320
2321inline void COpenGLExtensionHandler::extGlEnableIndexed(GLenum target, GLuint index)
2322{
2323#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2324 if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlEnableIndexedEXT)
2325 pGlEnableIndexedEXT(target, index);
2326#elif defined(GL_EXT_draw_buffers2)
2327 glEnableIndexedEXT(target, index);
2328#else
2329 os::Printer::log("glEnableIndexed not supported", ELL_ERROR);
2330#endif
2331}
2332
2333inline void COpenGLExtensionHandler::extGlDisableIndexed(GLenum target, GLuint index)
2334{
2335#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2336 if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlDisableIndexedEXT)
2337 pGlDisableIndexedEXT(target, index);
2338#elif defined(GL_EXT_draw_buffers2)
2339 glDisableIndexedEXT(target, index);
2340#else
2341 os::Printer::log("glDisableIndexed not supported", ELL_ERROR);
2342#endif
2343}
2344
2345inline void COpenGLExtensionHandler::extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
2346{
2347#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2348 if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFunciARB)
2349 pGlBlendFunciARB(buf, src, dst);
2350 else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendFuncIndexedAMD)
2351 pGlBlendFuncIndexedAMD(buf, src, dst);
2352#elif defined(GL_ARB_draw_buffers_blend)
2353 glBlendFunciARB(buf, src, dst);
2354#elif defined(GL_AMD_draw_buffers_blend)
2355 glBlendFuncIndexedAMD(buf, src, dst);
2356#else
2357 os::Printer::log("glBlendFuncIndexed not supported", ELL_ERROR);
2358#endif
2359}
2360
2361inline void COpenGLExtensionHandler::extGlBlendEquationIndexed(GLuint buf, GLenum mode)
2362{
2363#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2364 if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationiARB)
2365 pGlBlendEquationiARB(buf, mode);
2366 else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendEquationIndexedAMD)
2367 pGlBlendEquationIndexedAMD(buf, mode);
2368#elif defined(GL_ARB_draw_buffers_blend)
2369 glBlendEquationiARB(buf, mode);
2370#elif defined(GL_AMD_draw_buffers_blend)
2371 glBlendEquationIndexedAMD(buf, mode);
2372#else
2373 os::Printer::log("glBlendEquationIndexed not supported", ELL_ERROR);
2374#endif
2375}
2376
2377inline void COpenGLExtensionHandler::extGlProgramParameteri(GLhandleARB program, GLenum pname, GLint value)
2378{
2379#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
2380 if (queryFeature(EVDF_GEOMETRY_SHADER))
2381 {
2382 if (pGlProgramParameteriARB)
2383 pGlProgramParameteriARB(program, pname, value);
2384 else if (pGlProgramParameteriEXT)
2385 pGlProgramParameteriEXT(program, pname, value);
2386 }
2387#elif defined(GL_ARB_geometry_shader4)
2388 glProgramParameteriARB(program, pname, value);
2389#elif defined(GL_EXT_geometry_shader4)
2390 glProgramParameteriEXT((long GLuint)program, pname, value);
2391#elif defined(GL_NV_geometry_program4) || defined(GL_NV_geometry_shader4)
2392 glProgramParameteriNV(program, pname, value);
2393#else
2394 os::Printer::log("glProgramParameteri not supported", ELL_ERROR);
2395#endif
2396}
2397
2398inline void COpenGLExtensionHandler::extGlGenQueries(GLsizei n, GLuint *ids)
2399{
2400#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2401 if (pGlGenQueriesARB)
2402 pGlGenQueriesARB(n, ids);
2403 else if (pGlGenOcclusionQueriesNV)
2404 pGlGenOcclusionQueriesNV(n, ids);
2405#elif defined(GL_ARB_occlusion_query)
2406 glGenQueriesARB(n, ids);
2407#elif defined(GL_NV_occlusion_query)
2408 glGenOcclusionQueriesNV(n, ids);
2409#else
2410 os::Printer::log("glGenQueries not supported", ELL_ERROR);
2411#endif
2412}
2413
2414inline void COpenGLExtensionHandler::extGlDeleteQueries(GLsizei n, const GLuint *ids)
2415{
2416#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2417 if (pGlDeleteQueriesARB)
2418 pGlDeleteQueriesARB(n, ids);
2419 else if (pGlDeleteOcclusionQueriesNV)
2420 pGlDeleteOcclusionQueriesNV(n, ids);
2421#elif defined(GL_ARB_occlusion_query)
2422 glDeleteQueriesARB(n, ids);
2423#elif defined(GL_NV_occlusion_query)
2424 glDeleteOcclusionQueriesNV(n, ids);
2425#else
2426 os::Printer::log("glDeleteQueries not supported", ELL_ERROR);
2427#endif
2428}
2429
2430inline GLboolean COpenGLExtensionHandler::extGlIsQuery(GLuint id)
2431{
2432#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2433 if (pGlIsQueryARB)
2434 return pGlIsQueryARB(id);
2435 else if (pGlIsOcclusionQueryNV)
2436 return pGlIsOcclusionQueryNV(id);
2437 return false;
2438#elif defined(GL_ARB_occlusion_query)
2439 return glIsQueryARB(id);
2440#elif defined(GL_NV_occlusion_query)
2441 return glIsOcclusionQueryNV(id);
2442#else
2443 return false;
2444#endif
2445}
2446
2447inline void COpenGLExtensionHandler::extGlBeginQuery(GLenum target, GLuint id)
2448{
2449#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2450 if (pGlBeginQueryARB)
2451 pGlBeginQueryARB(target, id);
2452 else if (pGlBeginOcclusionQueryNV)
2453 pGlBeginOcclusionQueryNV(id);
2454#elif defined(GL_ARB_occlusion_query)
2455 glBeginQueryARB(target, id);
2456#elif defined(GL_NV_occlusion_query)
2457 glBeginOcclusionQueryNV(id);
2458#else
2459 os::Printer::log("glBeginQuery not supported", ELL_ERROR);
2460#endif
2461}
2462
2463inline void COpenGLExtensionHandler::extGlEndQuery(GLenum target)
2464{
2465#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2466 if (pGlEndQueryARB)
2467 pGlEndQueryARB(target);
2468 else if (pGlEndOcclusionQueryNV)
2469 pGlEndOcclusionQueryNV();
2470#elif defined(GL_ARB_occlusion_query)
2471 glEndQueryARB(target);
2472#elif defined(GL_NV_occlusion_query)
2473 glEndOcclusionQueryNV();
2474#else
2475 os::Printer::log("glEndQuery not supported", ELL_ERROR);
2476#endif
2477}
2478
2479inline void COpenGLExtensionHandler::extGlGetQueryiv(GLenum target, GLenum pname, GLint *params)
2480{
2481#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2482 if (pGlGetQueryivARB)
2483 pGlGetQueryivARB(target, pname, params);
2484#elif defined(GL_ARB_occlusion_query)
2485 glGetQueryivARB(target, pname, params);
2486#else
2487 os::Printer::log("glGetQueryivARB not supported", ELL_ERROR);
2488#endif
2489}
2490
2491inline void COpenGLExtensionHandler::extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
2492{
2493#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2494 if (pGlGetQueryObjectivARB)
2495 pGlGetQueryObjectivARB(id, pname, params);
2496 else if (pGlGetOcclusionQueryivNV)
2497 pGlGetOcclusionQueryivNV(id, pname, params);
2498#elif defined(GL_ARB_occlusion_query)
2499 glGetQueryObjectivARB(id, pname, params);
2500#elif defined(GL_NV_occlusion_query)
2501 glGetOcclusionQueryivNV(id, pname, params);
2502#else
2503 os::Printer::log("glGetQueryObjectiv not supported", ELL_ERROR);
2504#endif
2505}
2506
2507inline void COpenGLExtensionHandler::extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
2508{
2509#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2510 if (pGlGetQueryObjectuivARB)
2511 pGlGetQueryObjectuivARB(id, pname, params);
2512 else if (pGlGetOcclusionQueryuivNV)
2513 pGlGetOcclusionQueryuivNV(id, pname, params);
2514#elif defined(GL_ARB_occlusion_query)
2515 glGetQueryObjectuivARB(id, pname, params);
2516#elif defined(GL_NV_occlusion_query)
2517 glGetOcclusionQueryuivNV(id, pname, params);
2518#else
2519 os::Printer::log("glGetQueryObjectuiv not supported", ELL_ERROR);
2520#endif
2521}
2522
2523inline void COpenGLExtensionHandler::extGlSwapInterval(int interval)
2524{
2525 // we have wglext, so try to use that
2526#if defined(_IRR_WINDOWS_API_) && defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
2527#ifdef WGL_EXT_swap_control
2528 if (pWglSwapIntervalEXT)
2529 pWglSwapIntervalEXT(interval);
2530#endif
2531#endif
2532#ifdef _IRR_COMPILE_WITH_X11_DEVICE_
2533 //TODO: Check GLX_EXT_swap_control and GLX_MESA_swap_control
2534#ifdef GLX_SGI_swap_control
2535 // does not work with interval==0
2536#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2537 if (interval && pGlxSwapIntervalSGI)
2538 pGlxSwapIntervalSGI(interval);
2539#else
2540 if (interval)
2541 glXSwapIntervalSGI(interval);
2542#endif
2543#elif defined(GLX_EXT_swap_control)
2544#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2545 Display *dpy = glXGetCurrentDisplay();
2546 GLXDrawable drawable = glXGetCurrentDrawable();
2547
2548 if (pGlxSwapIntervalEXT)
2549 pGlxSwapIntervalEXT(dpy, drawable, interval);
2550#else
2551 pGlXSwapIntervalEXT(dpy, drawable, interval);
2552#endif
2553#elif defined(GLX_MESA_swap_control)
2554#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2555 if (pGlxSwapIntervalMESA)
2556 pGlxSwapIntervalMESA(interval);
2557#else
2558 pGlXSwapIntervalMESA(interval);
2559#endif
2560#endif
2561#endif
2562}
2563
2564inline void COpenGLExtensionHandler::extGlBlendEquation(GLenum mode)
2565{
2566#ifdef _IRR_OPENGL_USE_EXTPOINTER_
2567 if (pGlBlendEquation)
2568 pGlBlendEquation(mode);
2569 else if (pGlBlendEquationEXT)
2570 pGlBlendEquationEXT(mode);
2571#elif defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_subtract) || defined(GL_EXT_blend_logic_op)
2572 glBlendEquationEXT(mode);
2573#elif defined(GL_VERSION_1_2)
2574 glBlendEquation(mode);
2575#else
2576 os::Printer::log("glBlendEquation not supported", ELL_ERROR);
2577#endif
2578}
2579
2580
2581}
2582}
2583
2584#endif
2585
2586#endif
2587