1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
\r
2 // This file is part of the "Irrlicht Engine".
\r
3 // For conditions of distribution and use, see copyright notice in Irrlicht.h
\r
5 #ifndef __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
\r
6 #define __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
\r
8 #include "IrrCompileConfig.h"
\r
10 #ifdef _IRR_COMPILE_WITH_OPENGL_
\r
12 #include "EDriverFeatures.h"
\r
13 #include "irrTypes.h"
\r
16 #include "COpenGLCommon.h"
\r
18 #include "COpenGLCoreFeature.h"
\r
25 static const char* const OpenGLFeatureStrings[] = {
\r
26 "GL_3DFX_multisample",
\r
28 "GL_3DFX_texture_compression_FXT1",
\r
29 "GL_AMD_blend_minmax_factor",
\r
30 "GL_AMD_conservative_depth",
\r
31 "GL_AMD_debug_output",
\r
32 "GL_AMD_depth_clamp_separate",
\r
33 "GL_AMD_draw_buffers_blend",
\r
34 "GL_AMD_interleaved_elements",
\r
35 "GL_AMD_multi_draw_indirect",
\r
36 "GL_AMD_name_gen_delete",
\r
37 "GL_AMD_performance_monitor",
\r
38 "GL_AMD_pinned_memory",
\r
39 "GL_AMD_query_buffer_object",
\r
40 "GL_AMD_sample_positions",
\r
41 "GL_AMD_seamless_cubemap_per_texture",
\r
42 "GL_AMD_shader_atomic_counter_ops",
\r
43 "GL_AMD_shader_stencil_export",
\r
44 "GL_AMD_shader_trinary_minmax",
\r
45 "GL_AMD_sparse_texture",
\r
46 "GL_AMD_stencil_operation_extended",
\r
47 "GL_AMD_texture_texture4",
\r
48 "GL_AMD_transform_feedback3_lines_triangles",
\r
49 "GL_AMD_vertex_shader_layer",
\r
50 "GL_AMD_vertex_shader_tessellator",
\r
51 "GL_AMD_vertex_shader_viewport_index",
\r
52 "GL_APPLE_aux_depth_stencil",
\r
53 "GL_APPLE_client_storage",
\r
54 "GL_APPLE_element_array",
\r
56 "GL_APPLE_float_pixels",
\r
57 "GL_APPLE_flush_buffer_range",
\r
58 "GL_APPLE_object_purgeable",
\r
60 "GL_APPLE_row_bytes",
\r
61 "GL_APPLE_specular_vector",
\r
62 "GL_APPLE_texture_range",
\r
63 "GL_APPLE_transform_hint",
\r
64 "GL_APPLE_vertex_array_object",
\r
65 "GL_APPLE_vertex_array_range",
\r
66 "GL_APPLE_vertex_program_evaluators",
\r
67 "GL_APPLE_ycbcr_422",
\r
68 "GL_ARB_arrays_of_arrays",
\r
69 "GL_ARB_base_instance",
\r
70 "GL_ARB_bindless_texture",
\r
71 "GL_ARB_blend_func_extended",
\r
72 "GL_ARB_buffer_storage",
\r
74 "GL_ARB_clear_buffer_object",
\r
75 "GL_ARB_clear_texture",
\r
76 "GL_ARB_color_buffer_float",
\r
77 "GL_ARB_compatibility",
\r
78 "GL_ARB_compressed_texture_pixel_storage",
\r
79 "GL_ARB_compute_shader",
\r
80 "GL_ARB_compute_variable_group_size",
\r
81 "GL_ARB_conservative_depth",
\r
82 "GL_ARB_copy_buffer",
\r
83 "GL_ARB_copy_image",
\r
84 "GL_ARB_debug_output",
\r
85 "GL_ARB_depth_buffer_float",
\r
86 "GL_ARB_depth_clamp",
\r
87 "GL_ARB_depth_texture",
\r
88 "GL_ARB_direct_state_access",
\r
89 "GL_ARB_draw_buffers",
\r
90 "GL_ARB_draw_buffers_blend",
\r
91 "GL_ARB_draw_elements_base_vertex",
\r
92 "GL_ARB_draw_indirect",
\r
93 "GL_ARB_draw_instanced",
\r
94 "GL_ARB_ES2_compatibility",
\r
95 "GL_ARB_ES3_compatibility",
\r
96 "GL_ARB_enhanced_layouts",
\r
97 "GL_ARB_explicit_attrib_location",
\r
98 "GL_ARB_explicit_uniform_location",
\r
99 "GL_ARB_fragment_coord_conventions",
\r
100 "GL_ARB_fragment_layer_viewport",
\r
101 "GL_ARB_fragment_program",
\r
102 "GL_ARB_fragment_program_shadow",
\r
103 "GL_ARB_fragment_shader",
\r
104 "GL_ARB_framebuffer_no_attachments",
\r
105 "GL_ARB_framebuffer_object",
\r
106 "GL_ARB_framebuffer_sRGB",
\r
107 "GL_ARB_geometry_shader4",
\r
108 "GL_ARB_get_program_binary",
\r
109 "GL_ARB_gpu_shader5",
\r
110 "GL_ARB_gpu_shader_fp64",
\r
111 "GL_ARB_half_float_pixel",
\r
112 "GL_ARB_half_float_vertex",
\r
114 "GL_ARB_indirect_parameters",
\r
115 "GL_ARB_instanced_arrays",
\r
116 "GL_ARB_internalformat_query",
\r
117 "GL_ARB_internalformat_query2",
\r
118 "GL_ARB_invalidate_subdata",
\r
119 "GL_ARB_map_buffer_alignment",
\r
120 "GL_ARB_map_buffer_range",
\r
121 "GL_ARB_matrix_palette",
\r
122 "GL_ARB_multi_bind",
\r
123 "GL_ARB_multi_draw_indirect",
\r
124 "GL_ARB_multisample",
\r
125 "GL_ARB_multitexture",
\r
126 "GL_ARB_occlusion_query",
\r
127 "GL_ARB_occlusion_query2",
\r
128 "GL_ARB_pixel_buffer_object",
\r
129 "GL_ARB_point_parameters",
\r
130 "GL_ARB_point_sprite",
\r
131 "GL_ARB_program_interface_query",
\r
132 "GL_ARB_provoking_vertex",
\r
133 "GL_ARB_query_buffer_object",
\r
134 "GL_ARB_robust_buffer_access_behavior",
\r
135 "GL_ARB_robustness",
\r
136 "GL_ARB_robustness_isolation",
\r
137 "GL_ARB_sample_shading",
\r
138 "GL_ARB_sampler_objects",
\r
139 "GL_ARB_seamless_cube_map",
\r
140 "GL_ARB_seamless_cubemap_per_texture",
\r
141 "GL_ARB_separate_shader_objects",
\r
142 "GL_ARB_shader_atomic_counters",
\r
143 "GL_ARB_shader_bit_encoding",
\r
144 "GL_ARB_shader_draw_parameters",
\r
145 "GL_ARB_shader_group_vote",
\r
146 "GL_ARB_shader_image_load_store",
\r
147 "GL_ARB_shader_image_size",
\r
148 "GL_ARB_shader_objects",
\r
149 "GL_ARB_shader_precision",
\r
150 "GL_ARB_shader_stencil_export",
\r
151 "GL_ARB_shader_storage_buffer_object",
\r
152 "GL_ARB_shader_subroutine",
\r
153 "GL_ARB_shader_texture_lod",
\r
154 "GL_ARB_shading_language_100",
\r
155 "GL_ARB_shading_language_420pack",
\r
156 "GL_ARB_shading_language_include",
\r
157 "GL_ARB_shading_language_packing",
\r
159 "GL_ARB_shadow_ambient",
\r
160 "GL_ARB_sparse_texture",
\r
161 "GL_ARB_stencil_texturing",
\r
163 "GL_ARB_tessellation_shader",
\r
164 "GL_ARB_texture_border_clamp",
\r
165 "GL_ARB_texture_buffer_object",
\r
166 "GL_ARB_texture_buffer_object_rgb32",
\r
167 "GL_ARB_texture_buffer_range",
\r
168 "GL_ARB_texture_compression",
\r
169 "GL_ARB_texture_compression_bptc",
\r
170 "GL_ARB_texture_compression_rgtc",
\r
171 "GL_ARB_texture_cube_map",
\r
172 "GL_ARB_texture_cube_map_array",
\r
173 "GL_ARB_texture_env_add",
\r
174 "GL_ARB_texture_env_combine",
\r
175 "GL_ARB_texture_env_crossbar",
\r
176 "GL_ARB_texture_env_dot3",
\r
177 "GL_ARB_texture_float",
\r
178 "GL_ARB_texture_gather",
\r
179 "GL_ARB_texture_mirror_clamp_to_edge",
\r
180 "GL_ARB_texture_mirrored_repeat",
\r
181 "GL_ARB_texture_multisample",
\r
182 "GL_ARB_texture_non_power_of_two",
\r
183 "GL_ARB_texture_query_levels",
\r
184 "GL_ARB_texture_query_lod",
\r
185 "GL_ARB_texture_rectangle",
\r
186 "GL_ARB_texture_rg",
\r
187 "GL_ARB_texture_rgb10_a2ui",
\r
188 "GL_ARB_texture_stencil8",
\r
189 "GL_ARB_texture_storage",
\r
190 "GL_ARB_texture_storage_multisample",
\r
191 "GL_ARB_texture_swizzle",
\r
192 "GL_ARB_texture_view",
\r
193 "GL_ARB_timer_query",
\r
194 "GL_ARB_transform_feedback2",
\r
195 "GL_ARB_transform_feedback3",
\r
196 "GL_ARB_transform_feedback_instanced",
\r
197 "GL_ARB_transpose_matrix",
\r
198 "GL_ARB_uniform_buffer_object",
\r
199 "GL_ARB_vertex_array_bgra",
\r
200 "GL_ARB_vertex_array_object",
\r
201 "GL_ARB_vertex_attrib_64bit",
\r
202 "GL_ARB_vertex_attrib_binding",
\r
203 "GL_ARB_vertex_blend",
\r
204 "GL_ARB_vertex_buffer_object",
\r
205 "GL_ARB_vertex_program",
\r
206 "GL_ARB_vertex_shader",
\r
207 "GL_ARB_vertex_type_10f_11f_11f_rev",
\r
208 "GL_ARB_vertex_type_2_10_10_10_rev",
\r
209 "GL_ARB_viewport_array",
\r
210 "GL_ARB_window_pos",
\r
211 "GL_ATI_draw_buffers",
\r
212 "GL_ATI_element_array",
\r
213 "GL_ATI_envmap_bumpmap",
\r
214 "GL_ATI_fragment_shader",
\r
215 "GL_ATI_map_object_buffer",
\r
217 "GL_ATI_pixel_format_float",
\r
218 "GL_ATI_pn_triangles",
\r
219 "GL_ATI_separate_stencil",
\r
220 "GL_ATI_text_fragment_shader",
\r
221 "GL_ATI_texture_env_combine3",
\r
222 "GL_ATI_texture_float",
\r
223 "GL_ATI_texture_mirror_once",
\r
224 "GL_ATI_vertex_array_object",
\r
225 "GL_ATI_vertex_attrib_array_object",
\r
226 "GL_ATI_vertex_streams",
\r
227 "GL_EXT_422_pixels",
\r
230 "GL_EXT_bindable_uniform",
\r
231 "GL_EXT_blend_color",
\r
232 "GL_EXT_blend_equation_separate",
\r
233 "GL_EXT_blend_func_separate",
\r
234 "GL_EXT_blend_logic_op",
\r
235 "GL_EXT_blend_minmax",
\r
236 "GL_EXT_blend_subtract",
\r
237 "GL_EXT_clip_volume_hint",
\r
239 "GL_EXT_color_subtable",
\r
240 "GL_EXT_compiled_vertex_array",
\r
241 "GL_EXT_convolution",
\r
242 "GL_EXT_coordinate_frame",
\r
243 "GL_EXT_copy_texture",
\r
244 "GL_EXT_cull_vertex",
\r
245 "GL_EXT_debug_label",
\r
246 "GL_EXT_debug_marker",
\r
247 "GL_EXT_depth_bounds_test",
\r
248 "GL_EXT_direct_state_access",
\r
249 "GL_EXT_draw_buffers2",
\r
250 "GL_EXT_draw_instanced",
\r
251 "GL_EXT_draw_range_elements",
\r
252 "GL_EXT_fog_coord",
\r
253 "GL_EXT_framebuffer_blit",
\r
254 "GL_EXT_framebuffer_multisample",
\r
255 "GL_EXT_framebuffer_multisample_blit_scaled",
\r
256 "GL_EXT_framebuffer_object",
\r
257 "GL_EXT_framebuffer_sRGB",
\r
258 "GL_EXT_geometry_shader4",
\r
259 "GL_EXT_gpu_program_parameters",
\r
260 "GL_EXT_gpu_shader4",
\r
261 "GL_EXT_histogram",
\r
262 "GL_EXT_index_array_formats",
\r
263 "GL_EXT_index_func",
\r
264 "GL_EXT_index_material",
\r
265 "GL_EXT_index_texture",
\r
266 "GL_EXT_light_texture",
\r
267 "GL_EXT_misc_attribute",
\r
268 "GL_EXT_multi_draw_arrays",
\r
269 "GL_EXT_multisample",
\r
270 "GL_EXT_packed_depth_stencil",
\r
271 "GL_EXT_packed_float",
\r
272 "GL_EXT_packed_pixels",
\r
273 "GL_EXT_paletted_texture",
\r
274 "GL_EXT_pixel_buffer_object",
\r
275 "GL_EXT_pixel_transform",
\r
276 "GL_EXT_pixel_transform_color_table",
\r
277 "GL_EXT_point_parameters",
\r
278 "GL_EXT_polygon_offset",
\r
279 "GL_EXT_provoking_vertex",
\r
280 "GL_EXT_rescale_normal",
\r
281 "GL_EXT_secondary_color",
\r
282 "GL_EXT_separate_shader_objects",
\r
283 "GL_EXT_separate_specular_color",
\r
284 "GL_EXT_shader_image_load_store",
\r
285 "GL_EXT_shader_integer_mix",
\r
286 "GL_EXT_shadow_funcs",
\r
287 "GL_EXT_shared_texture_palette",
\r
288 "GL_EXT_stencil_clear_tag",
\r
289 "GL_EXT_stencil_two_side",
\r
290 "GL_EXT_stencil_wrap",
\r
291 "GL_EXT_subtexture",
\r
293 "GL_EXT_texture3D",
\r
294 "GL_EXT_texture_array",
\r
295 "GL_EXT_texture_buffer_object",
\r
296 "GL_EXT_texture_compression_latc",
\r
297 "GL_EXT_texture_compression_rgtc",
\r
298 "GL_EXT_texture_compression_s3tc",
\r
299 "GL_EXT_texture_cube_map",
\r
300 "GL_EXT_texture_env_add",
\r
301 "GL_EXT_texture_env_combine",
\r
302 "GL_EXT_texture_env_dot3",
\r
303 "GL_EXT_texture_filter_anisotropic",
\r
304 "GL_EXT_texture_integer",
\r
305 "GL_EXT_texture_lod_bias",
\r
306 "GL_EXT_texture_mirror_clamp",
\r
307 "GL_EXT_texture_object",
\r
308 "GL_EXT_texture_perturb_normal",
\r
309 "GL_EXT_texture_shared_exponent",
\r
310 "GL_EXT_texture_snorm",
\r
311 "GL_EXT_texture_sRGB",
\r
312 "GL_EXT_texture_sRGB_decode",
\r
313 "GL_EXT_texture_swizzle",
\r
314 "GL_EXT_timer_query",
\r
315 "GL_EXT_transform_feedback",
\r
316 "GL_EXT_vertex_array",
\r
317 "GL_EXT_vertex_array_bgra",
\r
318 "GL_EXT_vertex_attrib_64bit",
\r
319 "GL_EXT_vertex_shader",
\r
320 "GL_EXT_vertex_weighting",
\r
321 "GL_EXT_x11_sync_object",
\r
322 "GL_GREMEDY_frame_terminator",
\r
323 "GL_GREMEDY_string_marker",
\r
324 "GL_HP_convolution_border_modes",
\r
325 "GL_HP_image_transform",
\r
326 "GL_HP_occlusion_test",
\r
327 "GL_HP_texture_lighting",
\r
328 "GL_IBM_cull_vertex",
\r
329 "GL_IBM_multimode_draw_arrays",
\r
330 "GL_IBM_rasterpos_clip",
\r
331 "GL_IBM_static_data",
\r
332 "GL_IBM_texture_mirrored_repeat",
\r
333 "GL_IBM_vertex_array_lists",
\r
334 "GL_INGR_blend_func_separate",
\r
335 "GL_INGR_color_clamp",
\r
336 "GL_INGR_interlace_read",
\r
337 "GL_INGR_palette_buffer",
\r
338 "GL_INTEL_map_texture",
\r
339 "GL_INTEL_parallel_arrays",
\r
340 "GL_INTEL_texture_scissor",
\r
342 "GL_KHR_texture_compression_astc_hdr",
\r
343 "GL_KHR_texture_compression_astc_ldr",
\r
344 "GL_MESA_pack_invert",
\r
345 "GL_MESA_resize_buffers",
\r
346 "GL_MESA_window_pos",
\r
347 "GL_MESAX_texture_stack",
\r
348 "GL_MESA_ycbcr_texture",
\r
349 "GL_NVX_conditional_render",
\r
350 "GL_NV_bindless_multi_draw_indirect",
\r
351 "GL_NV_bindless_texture",
\r
352 "GL_NV_blend_equation_advanced",
\r
353 "GL_NV_blend_equation_advanced_coherent",
\r
354 "GL_NV_blend_square",
\r
355 "GL_NV_compute_program5",
\r
356 "GL_NV_conditional_render",
\r
357 "GL_NV_copy_depth_to_color",
\r
358 "GL_NV_copy_image",
\r
359 "GL_NV_deep_texture3D",
\r
360 "GL_NV_depth_buffer_float",
\r
361 "GL_NV_depth_clamp",
\r
362 "GL_NV_draw_texture",
\r
363 "GL_NV_evaluators",
\r
364 "GL_NV_explicit_multisample",
\r
366 "GL_NV_float_buffer",
\r
367 "GL_NV_fog_distance",
\r
368 "GL_NV_fragment_program",
\r
369 "GL_NV_fragment_program2",
\r
370 "GL_NV_fragment_program4",
\r
371 "GL_NV_fragment_program_option",
\r
372 "GL_NV_framebuffer_multisample_coverage",
\r
373 "GL_NV_geometry_program4",
\r
374 "GL_NV_geometry_shader4",
\r
375 "GL_NV_gpu_program4",
\r
376 "GL_NV_gpu_program5",
\r
377 "GL_NV_gpu_program5_mem_extended",
\r
378 "GL_NV_gpu_shader5",
\r
379 "GL_NV_half_float",
\r
380 "GL_NV_light_max_exponent",
\r
381 "GL_NV_multisample_coverage",
\r
382 "GL_NV_multisample_filter_hint",
\r
383 "GL_NV_occlusion_query",
\r
384 "GL_NV_packed_depth_stencil",
\r
385 "GL_NV_parameter_buffer_object",
\r
386 "GL_NV_parameter_buffer_object2",
\r
387 "GL_NV_path_rendering",
\r
388 "GL_NV_pixel_data_range",
\r
389 "GL_NV_point_sprite",
\r
390 "GL_NV_present_video",
\r
391 "GL_NV_primitive_restart",
\r
392 "GL_NV_register_combiners",
\r
393 "GL_NV_register_combiners2",
\r
394 "GL_NV_shader_atomic_counters",
\r
395 "GL_NV_shader_atomic_float",
\r
396 "GL_NV_shader_buffer_load",
\r
397 "GL_NV_shader_buffer_store",
\r
398 "GL_NV_shader_storage_buffer_object",
\r
399 "GL_NV_tessellation_program5",
\r
400 "GL_NV_texgen_emboss",
\r
401 "GL_NV_texgen_reflection",
\r
402 "GL_NV_texture_barrier",
\r
403 "GL_NV_texture_compression_vtc",
\r
404 "GL_NV_texture_env_combine4",
\r
405 "GL_NV_texture_expand_normal",
\r
406 "GL_NV_texture_multisample",
\r
407 "GL_NV_texture_rectangle",
\r
408 "GL_NV_texture_shader",
\r
409 "GL_NV_texture_shader2",
\r
410 "GL_NV_texture_shader3",
\r
411 "GL_NV_transform_feedback",
\r
412 "GL_NV_transform_feedback2",
\r
413 "GL_NV_vdpau_interop",
\r
414 "GL_NV_vertex_array_range",
\r
415 "GL_NV_vertex_array_range2",
\r
416 "GL_NV_vertex_attrib_integer_64bit",
\r
417 "GL_NV_vertex_buffer_unified_memory",
\r
418 "GL_NV_vertex_program",
\r
419 "GL_NV_vertex_program1_1",
\r
420 "GL_NV_vertex_program2",
\r
421 "GL_NV_vertex_program2_option",
\r
422 "GL_NV_vertex_program3",
\r
423 "GL_NV_vertex_program4",
\r
424 "GL_NV_video_capture",
\r
425 "GL_OES_byte_coordinates",
\r
426 "GL_OES_compressed_paletted_texture",
\r
427 "GL_OES_fixed_point",
\r
428 "GL_OES_query_matrix",
\r
429 "GL_OES_read_format",
\r
430 "GL_OES_single_precision",
\r
431 "GL_OML_interlace",
\r
433 "GL_OML_subsample",
\r
434 "GL_PGI_misc_hints",
\r
435 "GL_PGI_vertex_hints",
\r
436 "GL_REND_screen_coordinates",
\r
438 "GL_SGI_color_matrix",
\r
439 "GL_SGI_color_table",
\r
440 "GL_SGI_texture_color_table",
\r
441 "GL_SGIS_detail_texture",
\r
442 "GL_SGIS_fog_function",
\r
443 "GL_SGIS_generate_mipmap",
\r
444 "GL_SGIS_multisample",
\r
445 "GL_SGIS_pixel_texture",
\r
446 "GL_SGIS_point_line_texgen",
\r
447 "GL_SGIS_point_parameters",
\r
448 "GL_SGIS_sharpen_texture",
\r
449 "GL_SGIS_texture4D",
\r
450 "GL_SGIS_texture_border_clamp",
\r
451 "GL_SGIS_texture_color_mask",
\r
452 "GL_SGIS_texture_edge_clamp",
\r
453 "GL_SGIS_texture_filter4",
\r
454 "GL_SGIS_texture_lod",
\r
455 "GL_SGIS_texture_select",
\r
457 "GL_SGIX_async_histogram",
\r
458 "GL_SGIX_async_pixel",
\r
459 "GL_SGIX_blend_alpha_minmax",
\r
460 "GL_SGIX_calligraphic_fragment",
\r
462 "GL_SGIX_convolution_accuracy",
\r
463 "GL_SGIX_depth_pass_instrument",
\r
464 "GL_SGIX_depth_texture",
\r
465 "GL_SGIX_flush_raster",
\r
466 "GL_SGIX_fog_offset",
\r
467 "GL_SGIX_fog_scale",
\r
468 "GL_SGIX_fragment_lighting",
\r
469 "GL_SGIX_framezoom",
\r
470 "GL_SGIX_igloo_interface",
\r
471 "GL_SGIX_instruments",
\r
472 "GL_SGIX_interlace",
\r
473 "GL_SGIX_ir_instrument1",
\r
474 "GL_SGIX_list_priority",
\r
475 "GL_SGIX_pixel_texture",
\r
476 "GL_SGIX_pixel_tiles",
\r
477 "GL_SGIX_polynomial_ffd",
\r
478 "GL_SGIX_reference_plane",
\r
479 "GL_SGIX_resample",
\r
480 "GL_SGIX_scalebias_hint",
\r
482 "GL_SGIX_shadow_ambient",
\r
484 "GL_SGIX_subsample",
\r
485 "GL_SGIX_tag_sample_buffer",
\r
486 "GL_SGIX_texture_add_env",
\r
487 "GL_SGIX_texture_coordinate_clamp",
\r
488 "GL_SGIX_texture_lod_bias",
\r
489 "GL_SGIX_texture_multi_buffer",
\r
490 "GL_SGIX_texture_scale_bias",
\r
491 "GL_SGIX_vertex_preclip",
\r
494 "GL_SGIX_ycrcb_subsample",
\r
495 "GL_SUN_convolution_border_modes",
\r
496 "GL_SUN_global_alpha",
\r
497 "GL_SUN_mesh_array",
\r
498 "GL_SUN_slice_accum",
\r
499 "GL_SUN_triangle_list",
\r
501 "GL_SUNX_constant_data",
\r
502 "GL_WIN_phong_shading",
\r
503 "GL_WIN_specular_fog",
\r
504 // unofficial stuff
\r
505 "GL_NVX_gpu_memory_info"
\r
509 class COpenGLExtensionHandler
\r
512 enum EOpenGLFeatures {
\r
513 IRR_3DFX_multisample = 0,
\r
515 IRR_3DFX_texture_compression_FXT1,
\r
516 IRR_AMD_blend_minmax_factor,
\r
517 IRR_AMD_conservative_depth,
\r
518 IRR_AMD_debug_output,
\r
519 IRR_AMD_depth_clamp_separate,
\r
520 IRR_AMD_draw_buffers_blend,
\r
521 IRR_AMD_interleaved_elements,
\r
522 IRR_AMD_multi_draw_indirect,
\r
523 IRR_AMD_name_gen_delete,
\r
524 IRR_AMD_performance_monitor,
\r
525 IRR_AMD_pinned_memory,
\r
526 IRR_AMD_query_buffer_object,
\r
527 IRR_AMD_sample_positions,
\r
528 IRR_AMD_seamless_cubemap_per_texture,
\r
529 IRR_AMD_shader_atomic_counter_ops,
\r
530 IRR_AMD_shader_stencil_export,
\r
531 IRR_AMD_shader_trinary_minmax,
\r
532 IRR_AMD_sparse_texture,
\r
533 IRR_AMD_stencil_operation_extended,
\r
534 IRR_AMD_texture_texture4,
\r
535 IRR_AMD_transform_feedback3_lines_triangles,
\r
536 IRR_AMD_vertex_shader_layer,
\r
537 IRR_AMD_vertex_shader_tessellator,
\r
538 IRR_AMD_vertex_shader_viewport_index,
\r
539 IRR_APPLE_aux_depth_stencil,
\r
540 IRR_APPLE_client_storage,
\r
541 IRR_APPLE_element_array,
\r
543 IRR_APPLE_float_pixels,
\r
544 IRR_APPLE_flush_buffer_range,
\r
545 IRR_APPLE_object_purgeable,
\r
547 IRR_APPLE_row_bytes,
\r
548 IRR_APPLE_specular_vector,
\r
549 IRR_APPLE_texture_range,
\r
550 IRR_APPLE_transform_hint,
\r
551 IRR_APPLE_vertex_array_object,
\r
552 IRR_APPLE_vertex_array_range,
\r
553 IRR_APPLE_vertex_program_evaluators,
\r
554 IRR_APPLE_ycbcr_422,
\r
555 IRR_ARB_arrays_of_arrays,
\r
556 IRR_ARB_base_instance,
\r
557 IRR_ARB_bindless_texture,
\r
558 IRR_ARB_blend_func_extended,
\r
559 IRR_ARB_buffer_storage,
\r
561 IRR_ARB_clear_buffer_object,
\r
562 IRR_ARB_clear_texture,
\r
563 IRR_ARB_color_buffer_float,
\r
564 IRR_ARB_compatibility,
\r
565 IRR_ARB_compressed_texture_pixel_storage,
\r
566 IRR_ARB_compute_shader,
\r
567 IRR_ARB_compute_variable_group_size,
\r
568 IRR_ARB_conservative_depth,
\r
569 IRR_ARB_copy_buffer,
\r
570 IRR_ARB_copy_image,
\r
571 IRR_ARB_debug_output,
\r
572 IRR_ARB_depth_buffer_float,
\r
573 IRR_ARB_depth_clamp,
\r
574 IRR_ARB_depth_texture,
\r
575 IRR_ARB_direct_state_access,
\r
576 IRR_ARB_draw_buffers,
\r
577 IRR_ARB_draw_buffers_blend,
\r
578 IRR_ARB_draw_elements_base_vertex,
\r
579 IRR_ARB_draw_indirect,
\r
580 IRR_ARB_draw_instanced,
\r
581 IRR_ARB_ES2_compatibility,
\r
582 IRR_ARB_ES3_compatibility,
\r
583 IRR_ARB_enhanced_layouts,
\r
584 IRR_ARB_explicit_attrib_location,
\r
585 IRR_ARB_explicit_uniform_location,
\r
586 IRR_ARB_fragment_coord_conventions,
\r
587 IRR_ARB_fragment_layer_viewport,
\r
588 IRR_ARB_fragment_program,
\r
589 IRR_ARB_fragment_program_shadow,
\r
590 IRR_ARB_fragment_shader,
\r
591 IRR_ARB_framebuffer_no_attachments,
\r
592 IRR_ARB_framebuffer_object,
\r
593 IRR_ARB_framebuffer_sRGB,
\r
594 IRR_ARB_geometry_shader4,
\r
595 IRR_ARB_get_program_binary,
\r
596 IRR_ARB_gpu_shader5,
\r
597 IRR_ARB_gpu_shader_fp64,
\r
598 IRR_ARB_half_float_pixel,
\r
599 IRR_ARB_half_float_vertex,
\r
601 IRR_ARB_indirect_parameters,
\r
602 IRR_ARB_instanced_arrays,
\r
603 IRR_ARB_internalformat_query,
\r
604 IRR_ARB_internalformat_query2,
\r
605 IRR_ARB_invalidate_subdata,
\r
606 IRR_ARB_map_buffer_alignment,
\r
607 IRR_ARB_map_buffer_range,
\r
608 IRR_ARB_matrix_palette,
\r
609 IRR_ARB_multi_bind,
\r
610 IRR_ARB_multi_draw_indirect,
\r
611 IRR_ARB_multisample,
\r
612 IRR_ARB_multitexture,
\r
613 IRR_ARB_occlusion_query,
\r
614 IRR_ARB_occlusion_query2,
\r
615 IRR_ARB_pixel_buffer_object,
\r
616 IRR_ARB_point_parameters,
\r
617 IRR_ARB_point_sprite,
\r
618 IRR_ARB_program_interface_query,
\r
619 IRR_ARB_provoking_vertex,
\r
620 IRR_ARB_query_buffer_object,
\r
621 IRR_ARB_robust_buffer_access_behavior,
\r
622 IRR_ARB_robustness,
\r
623 IRR_ARB_robustness_isolation,
\r
624 IRR_ARB_sample_shading,
\r
625 IRR_ARB_sampler_objects,
\r
626 IRR_ARB_seamless_cube_map,
\r
627 IRR_ARB_seamless_cubemap_per_texture,
\r
628 IRR_ARB_separate_shader_objects,
\r
629 IRR_ARB_shader_atomic_counters,
\r
630 IRR_ARB_shader_bit_encoding,
\r
631 IRR_ARB_shader_draw_parameters,
\r
632 IRR_ARB_shader_group_vote,
\r
633 IRR_ARB_shader_image_load_store,
\r
634 IRR_ARB_shader_image_size,
\r
635 IRR_ARB_shader_objects,
\r
636 IRR_ARB_shader_precision,
\r
637 IRR_ARB_shader_stencil_export,
\r
638 IRR_ARB_shader_storage_buffer_object,
\r
639 IRR_ARB_shader_subroutine,
\r
640 IRR_ARB_shader_texture_lod,
\r
641 IRR_ARB_shading_language_100,
\r
642 IRR_ARB_shading_language_420pack,
\r
643 IRR_ARB_shading_language_include,
\r
644 IRR_ARB_shading_language_packing,
\r
646 IRR_ARB_shadow_ambient,
\r
647 IRR_ARB_sparse_texture,
\r
648 IRR_ARB_stencil_texturing,
\r
650 IRR_ARB_tessellation_shader,
\r
651 IRR_ARB_texture_border_clamp,
\r
652 IRR_ARB_texture_buffer_object,
\r
653 IRR_ARB_texture_buffer_object_rgb32,
\r
654 IRR_ARB_texture_buffer_range,
\r
655 IRR_ARB_texture_compression,
\r
656 IRR_ARB_texture_compression_bptc,
\r
657 IRR_ARB_texture_compression_rgtc,
\r
658 IRR_ARB_texture_cube_map,
\r
659 IRR_ARB_texture_cube_map_array,
\r
660 IRR_ARB_texture_env_add,
\r
661 IRR_ARB_texture_env_combine,
\r
662 IRR_ARB_texture_env_crossbar,
\r
663 IRR_ARB_texture_env_dot3,
\r
664 IRR_ARB_texture_float,
\r
665 IRR_ARB_texture_gather,
\r
666 IRR_ARB_texture_mirror_clamp_to_edge,
\r
667 IRR_ARB_texture_mirrored_repeat,
\r
668 IRR_ARB_texture_multisample,
\r
669 IRR_ARB_texture_non_power_of_two,
\r
670 IRR_ARB_texture_query_levels,
\r
671 IRR_ARB_texture_query_lod,
\r
672 IRR_ARB_texture_rectangle,
\r
673 IRR_ARB_texture_rg,
\r
674 IRR_ARB_texture_rgb10_a2ui,
\r
675 IRR_ARB_texture_stencil8,
\r
676 IRR_ARB_texture_storage,
\r
677 IRR_ARB_texture_storage_multisample,
\r
678 IRR_ARB_texture_swizzle,
\r
679 IRR_ARB_texture_view,
\r
680 IRR_ARB_timer_query,
\r
681 IRR_ARB_transform_feedback2,
\r
682 IRR_ARB_transform_feedback3,
\r
683 IRR_ARB_transform_feedback_instanced,
\r
684 IRR_ARB_transpose_matrix,
\r
685 IRR_ARB_uniform_buffer_object,
\r
686 IRR_ARB_vertex_array_bgra,
\r
687 IRR_ARB_vertex_array_object,
\r
688 IRR_ARB_vertex_attrib_64bit,
\r
689 IRR_ARB_vertex_attrib_binding,
\r
690 IRR_ARB_vertex_blend,
\r
691 IRR_ARB_vertex_buffer_object,
\r
692 IRR_ARB_vertex_program,
\r
693 IRR_ARB_vertex_shader,
\r
694 IRR_ARB_vertex_type_10f_11f_11f_rev,
\r
695 IRR_ARB_vertex_type_2_10_10_10_rev,
\r
696 IRR_ARB_viewport_array,
\r
697 IRR_ARB_window_pos,
\r
698 IRR_ATI_draw_buffers,
\r
699 IRR_ATI_element_array,
\r
700 IRR_ATI_envmap_bumpmap,
\r
701 IRR_ATI_fragment_shader,
\r
702 IRR_ATI_map_object_buffer,
\r
704 IRR_ATI_pixel_format_float,
\r
705 IRR_ATI_pn_triangles,
\r
706 IRR_ATI_separate_stencil,
\r
707 IRR_ATI_text_fragment_shader,
\r
708 IRR_ATI_texture_env_combine3,
\r
709 IRR_ATI_texture_float,
\r
710 IRR_ATI_texture_mirror_once,
\r
711 IRR_ATI_vertex_array_object,
\r
712 IRR_ATI_vertex_attrib_array_object,
\r
713 IRR_ATI_vertex_streams,
\r
714 IRR_EXT_422_pixels,
\r
717 IRR_EXT_bindable_uniform,
\r
718 IRR_EXT_blend_color,
\r
719 IRR_EXT_blend_equation_separate,
\r
720 IRR_EXT_blend_func_separate,
\r
721 IRR_EXT_blend_logic_op,
\r
722 IRR_EXT_blend_minmax,
\r
723 IRR_EXT_blend_subtract,
\r
724 IRR_EXT_clip_volume_hint,
\r
726 IRR_EXT_color_subtable,
\r
727 IRR_EXT_compiled_vertex_array,
\r
728 IRR_EXT_convolution,
\r
729 IRR_EXT_coordinate_frame,
\r
730 IRR_EXT_copy_texture,
\r
731 IRR_EXT_cull_vertex,
\r
732 IRR_EXT_debug_label,
\r
733 IRR_EXT_debug_marker,
\r
734 IRR_EXT_depth_bounds_test,
\r
735 IRR_EXT_direct_state_access,
\r
736 IRR_EXT_draw_buffers2,
\r
737 IRR_EXT_draw_instanced,
\r
738 IRR_EXT_draw_range_elements,
\r
740 IRR_EXT_framebuffer_blit,
\r
741 IRR_EXT_framebuffer_multisample,
\r
742 IRR_EXT_framebuffer_multisample_blit_scaled,
\r
743 IRR_EXT_framebuffer_object,
\r
744 IRR_EXT_framebuffer_sRGB,
\r
745 IRR_EXT_geometry_shader4,
\r
746 IRR_EXT_gpu_program_parameters,
\r
747 IRR_EXT_gpu_shader4,
\r
749 IRR_EXT_index_array_formats,
\r
750 IRR_EXT_index_func,
\r
751 IRR_EXT_index_material,
\r
752 IRR_EXT_index_texture,
\r
753 IRR_EXT_light_texture,
\r
754 IRR_EXT_misc_attribute,
\r
755 IRR_EXT_multi_draw_arrays,
\r
756 IRR_EXT_multisample,
\r
757 IRR_EXT_packed_depth_stencil,
\r
758 IRR_EXT_packed_float,
\r
759 IRR_EXT_packed_pixels,
\r
760 IRR_EXT_paletted_texture,
\r
761 IRR_EXT_pixel_buffer_object,
\r
762 IRR_EXT_pixel_transform,
\r
763 IRR_EXT_pixel_transform_color_table,
\r
764 IRR_EXT_point_parameters,
\r
765 IRR_EXT_polygon_offset,
\r
766 IRR_EXT_provoking_vertex,
\r
767 IRR_EXT_rescale_normal,
\r
768 IRR_EXT_secondary_color,
\r
769 IRR_EXT_separate_shader_objects,
\r
770 IRR_EXT_separate_specular_color,
\r
771 IRR_EXT_shader_image_load_store,
\r
772 IRR_EXT_shader_integer_mix,
\r
773 IRR_EXT_shadow_funcs,
\r
774 IRR_EXT_shared_texture_palette,
\r
775 IRR_EXT_stencil_clear_tag,
\r
776 IRR_EXT_stencil_two_side,
\r
777 IRR_EXT_stencil_wrap,
\r
778 IRR_EXT_subtexture,
\r
781 IRR_EXT_texture_array,
\r
782 IRR_EXT_texture_buffer_object,
\r
783 IRR_EXT_texture_compression_latc,
\r
784 IRR_EXT_texture_compression_rgtc,
\r
785 IRR_EXT_texture_compression_s3tc,
\r
786 IRR_EXT_texture_cube_map,
\r
787 IRR_EXT_texture_env_add,
\r
788 IRR_EXT_texture_env_combine,
\r
789 IRR_EXT_texture_env_dot3,
\r
790 IRR_EXT_texture_filter_anisotropic,
\r
791 IRR_EXT_texture_integer,
\r
792 IRR_EXT_texture_lod_bias,
\r
793 IRR_EXT_texture_mirror_clamp,
\r
794 IRR_EXT_texture_object,
\r
795 IRR_EXT_texture_perturb_normal,
\r
796 IRR_EXT_texture_shared_exponent,
\r
797 IRR_EXT_texture_snorm,
\r
798 IRR_EXT_texture_sRGB,
\r
799 IRR_EXT_texture_sRGB_decode,
\r
800 IRR_EXT_texture_swizzle,
\r
801 IRR_EXT_timer_query,
\r
802 IRR_EXT_transform_feedback,
\r
803 IRR_EXT_vertex_array,
\r
804 IRR_EXT_vertex_array_bgra,
\r
805 IRR_EXT_vertex_attrib_64bit,
\r
806 IRR_EXT_vertex_shader,
\r
807 IRR_EXT_vertex_weighting,
\r
808 IRR_EXT_x11_sync_object,
\r
809 IRR_GREMEDY_frame_terminator,
\r
810 IRR_GREMEDY_string_marker,
\r
811 IRR_HP_convolution_border_modes,
\r
812 IRR_HP_image_transform,
\r
813 IRR_HP_occlusion_test,
\r
814 IRR_HP_texture_lighting,
\r
815 IRR_IBM_cull_vertex,
\r
816 IRR_IBM_multimode_draw_arrays,
\r
817 IRR_IBM_rasterpos_clip,
\r
818 IRR_IBM_static_data,
\r
819 IRR_IBM_texture_mirrored_repeat,
\r
820 IRR_IBM_vertex_array_lists,
\r
821 IRR_INGR_blend_func_separate,
\r
822 IRR_INGR_color_clamp,
\r
823 IRR_INGR_interlace_read,
\r
824 IRR_INGR_palette_buffer,
\r
825 IRR_INTEL_map_texture,
\r
826 IRR_INTEL_parallel_arrays,
\r
827 IRR_INTEL_texture_scissor,
\r
829 IRR_KHR_texture_compression_astc_hdr,
\r
830 IRR_KHR_texture_compression_astc_ldr,
\r
831 IRR_MESA_pack_invert,
\r
832 IRR_MESA_resize_buffers,
\r
833 IRR_MESA_window_pos,
\r
834 IRR_MESAX_texture_stack,
\r
835 IRR_MESA_ycbcr_texture,
\r
836 IRR_NVX_conditional_render,
\r
837 IRR_NV_bindless_multi_draw_indirect,
\r
838 IRR_NV_bindless_texture,
\r
839 IRR_NV_blend_equation_advanced,
\r
840 IRR_NV_blend_equation_advanced_coherent,
\r
841 IRR_NV_blend_square,
\r
842 IRR_NV_compute_program5,
\r
843 IRR_NV_conditional_render,
\r
844 IRR_NV_copy_depth_to_color,
\r
846 IRR_NV_deep_texture3D,
\r
847 IRR_NV_depth_buffer_float,
\r
848 IRR_NV_depth_clamp,
\r
849 IRR_NV_draw_texture,
\r
851 IRR_NV_explicit_multisample,
\r
853 IRR_NV_float_buffer,
\r
854 IRR_NV_fog_distance,
\r
855 IRR_NV_fragment_program,
\r
856 IRR_NV_fragment_program2,
\r
857 IRR_NV_fragment_program4,
\r
858 IRR_NV_fragment_program_option,
\r
859 IRR_NV_framebuffer_multisample_coverage,
\r
860 IRR_NV_geometry_program4,
\r
861 IRR_NV_geometry_shader4,
\r
862 IRR_NV_gpu_program4,
\r
863 IRR_NV_gpu_program5,
\r
864 IRR_NV_gpu_program5_mem_extended,
\r
865 IRR_NV_gpu_shader5,
\r
867 IRR_NV_light_max_exponent,
\r
868 IRR_NV_multisample_coverage,
\r
869 IRR_NV_multisample_filter_hint,
\r
870 IRR_NV_occlusion_query,
\r
871 IRR_NV_packed_depth_stencil,
\r
872 IRR_NV_parameter_buffer_object,
\r
873 IRR_NV_parameter_buffer_object2,
\r
874 IRR_NV_path_rendering,
\r
875 IRR_NV_pixel_data_range,
\r
876 IRR_NV_point_sprite,
\r
877 IRR_NV_present_video,
\r
878 IRR_NV_primitive_restart,
\r
879 IRR_NV_register_combiners,
\r
880 IRR_NV_register_combiners2,
\r
881 IRR_NV_shader_atomic_counters,
\r
882 IRR_NV_shader_atomic_float,
\r
883 IRR_NV_shader_buffer_load,
\r
884 IRR_NV_shader_buffer_store,
\r
885 IRR_NV_shader_storage_buffer_object,
\r
886 IRR_NV_tessellation_program5,
\r
887 IRR_NV_texgen_emboss,
\r
888 IRR_NV_texgen_reflection,
\r
889 IRR_NV_texture_barrier,
\r
890 IRR_NV_texture_compression_vtc,
\r
891 IRR_NV_texture_env_combine4,
\r
892 IRR_NV_texture_expand_normal,
\r
893 IRR_NV_texture_multisample,
\r
894 IRR_NV_texture_rectangle,
\r
895 IRR_NV_texture_shader,
\r
896 IRR_NV_texture_shader2,
\r
897 IRR_NV_texture_shader3,
\r
898 IRR_NV_transform_feedback,
\r
899 IRR_NV_transform_feedback2,
\r
900 IRR_NV_vdpau_interop,
\r
901 IRR_NV_vertex_array_range,
\r
902 IRR_NV_vertex_array_range2,
\r
903 IRR_NV_vertex_attrib_integer_64bit,
\r
904 IRR_NV_vertex_buffer_unified_memory,
\r
905 IRR_NV_vertex_program,
\r
906 IRR_NV_vertex_program1_1,
\r
907 IRR_NV_vertex_program2,
\r
908 IRR_NV_vertex_program2_option,
\r
909 IRR_NV_vertex_program3,
\r
910 IRR_NV_vertex_program4,
\r
911 IRR_NV_video_capture,
\r
912 IRR_OES_byte_coordinates,
\r
913 IRR_OES_compressed_paletted_texture,
\r
914 IRR_OES_fixed_point,
\r
915 IRR_OES_query_matrix,
\r
916 IRR_OES_read_format,
\r
917 IRR_OES_single_precision,
\r
921 IRR_PGI_misc_hints,
\r
922 IRR_PGI_vertex_hints,
\r
923 IRR_REND_screen_coordinates,
\r
925 IRR_SGI_color_matrix,
\r
926 IRR_SGI_color_table,
\r
927 IRR_SGI_texture_color_table,
\r
928 IRR_SGIS_detail_texture,
\r
929 IRR_SGIS_fog_function,
\r
930 IRR_SGIS_generate_mipmap,
\r
931 IRR_SGIS_multisample,
\r
932 IRR_SGIS_pixel_texture,
\r
933 IRR_SGIS_point_line_texgen,
\r
934 IRR_SGIS_point_parameters,
\r
935 IRR_SGIS_sharpen_texture,
\r
936 IRR_SGIS_texture4D,
\r
937 IRR_SGIS_texture_border_clamp,
\r
938 IRR_SGIS_texture_color_mask,
\r
939 IRR_SGIS_texture_edge_clamp,
\r
940 IRR_SGIS_texture_filter4,
\r
941 IRR_SGIS_texture_lod,
\r
942 IRR_SGIS_texture_select,
\r
944 IRR_SGIX_async_histogram,
\r
945 IRR_SGIX_async_pixel,
\r
946 IRR_SGIX_blend_alpha_minmax,
\r
947 IRR_SGIX_calligraphic_fragment,
\r
949 IRR_SGIX_convolution_accuracy,
\r
950 IRR_SGIX_depth_pass_instrument,
\r
951 IRR_SGIX_depth_texture,
\r
952 IRR_SGIX_flush_raster,
\r
953 IRR_SGIX_fog_offset,
\r
954 IRR_SGIX_fog_scale,
\r
955 IRR_SGIX_fragment_lighting,
\r
956 IRR_SGIX_framezoom,
\r
957 IRR_SGIX_igloo_interface,
\r
958 IRR_SGIX_instruments,
\r
959 IRR_SGIX_interlace,
\r
960 IRR_SGIX_ir_instrument1,
\r
961 IRR_SGIX_list_priority,
\r
962 IRR_SGIX_pixel_texture,
\r
963 IRR_SGIX_pixel_tiles,
\r
964 IRR_SGIX_polynomial_ffd,
\r
965 IRR_SGIX_reference_plane,
\r
967 IRR_SGIX_scalebias_hint,
\r
969 IRR_SGIX_shadow_ambient,
\r
971 IRR_SGIX_subsample,
\r
972 IRR_SGIX_tag_sample_buffer,
\r
973 IRR_SGIX_texture_add_env,
\r
974 IRR_SGIX_texture_coordinate_clamp,
\r
975 IRR_SGIX_texture_lod_bias,
\r
976 IRR_SGIX_texture_multi_buffer,
\r
977 IRR_SGIX_texture_scale_bias,
\r
978 IRR_SGIX_vertex_preclip,
\r
981 IRR_SGIX_ycrcb_subsample,
\r
982 IRR_SUN_convolution_border_modes,
\r
983 IRR_SUN_global_alpha,
\r
984 IRR_SUN_mesh_array,
\r
985 IRR_SUN_slice_accum,
\r
986 IRR_SUN_triangle_list,
\r
988 IRR_SUNX_constant_data,
\r
989 IRR_WIN_phong_shading,
\r
990 IRR_WIN_specular_fog,
\r
991 IRR_NVX_gpu_memory_info,
\r
992 IRR_OpenGL_Feature_Count
\r
997 COpenGLExtensionHandler();
\r
999 // deferred initialization
\r
1000 void initExtensions(bool stencilBuffer);
\r
1002 const COpenGLCoreFeature& getFeature() const;
\r
1004 //! queries the features of the driver, returns true if feature is available
\r
1005 bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const;
\r
1007 //! queries the features of the driver, returns true if feature is available
\r
1008 bool queryOpenGLFeature(EOpenGLFeatures feature) const
\r
1010 return FeatureAvailable[feature];
\r
1013 //! show all features with availability
\r
1014 void dump(ELOG_LEVEL logLevel) const;
\r
1016 void dumpFramebufferFormats() const;
\r
1018 // Some variables for properties
\r
1019 bool StencilBuffer;
\r
1020 bool TextureCompressionExtension;
\r
1022 // Some non-boolean properties
\r
1023 //! Maximum hardware lights supported
\r
1025 //! Maximal Anisotropy
\r
1027 //! Number of user clipplanes
\r
1028 u8 MaxUserClipPlanes;
\r
1029 //! Number of auxiliary buffers
\r
1031 //! Optimal number of indices per meshbuffer
\r
1033 //! Maximal texture dimension
\r
1034 u32 MaxTextureSize;
\r
1035 //! Maximal vertices handled by geometry shaders
\r
1036 u32 MaxGeometryVerticesOut;
\r
1037 //! Maximal LOD Bias
\r
1038 f32 MaxTextureLODBias;
\r
1039 //! Minimal and maximal supported thickness for lines without smoothing
\r
1040 GLfloat DimAliasedLine[2];
\r
1041 //! Minimal and maximal supported thickness for points without smoothing
\r
1042 GLfloat DimAliasedPoint[2];
\r
1043 //! Minimal and maximal supported thickness for lines with smoothing
\r
1044 GLfloat DimSmoothedLine[2];
\r
1045 //! Minimal and maximal supported thickness for points with smoothing
\r
1046 GLfloat DimSmoothedPoint[2];
\r
1048 //! OpenGL version as Integer: 100*Major+Minor, i.e. 2.1 becomes 201
\r
1050 //! GLSL version as Integer: 100*Major+Minor
\r
1051 u16 ShaderLanguageVersion;
\r
1053 bool OcclusionQuerySupport;
\r
1055 // Info needed for workarounds.
\r
1056 bool IsAtiRadeonX;
\r
1058 //! Workaround until direct state access with framebuffers is stable enough in drivers
\r
1059 // https://devtalk.nvidia.com/default/topic/1030494/opengl/bug-amp-amp-spec-violation-checknamedframebufferstatus-returns-gl_framebuffer_incomplete_dimensions_ext-under-gl-4-5-core/
\r
1060 // https://stackoverflow.com/questions/51304706/problems-with-attaching-textures-of-different-sizes-to-fbo
\r
1061 static bool needsDSAFramebufferHack;
\r
1063 // public access to the (loaded) extensions.
\r
1064 // general functions
\r
1065 void irrGlActiveTexture(GLenum texture);
\r
1066 void irrGlClientActiveTexture(GLenum texture);
\r
1067 void extGlPointParameterf(GLint loc, GLfloat f);
\r
1068 void extGlPointParameterfv(GLint loc, const GLfloat *v);
\r
1069 void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
\r
1070 void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
\r
1071 void irrGlCompressedTexImage2D(GLenum target, GLint level,
\r
1072 GLenum internalformat, GLsizei width, GLsizei height,
\r
1073 GLint border, GLsizei imageSize, const void* data);
\r
1074 void irrGlCompressedTexSubImage2D(GLenum target, GLint level,
\r
1075 GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
\r
1076 GLenum format, GLsizei imageSize, const void* data);
\r
1078 // shader programming
\r
1079 void extGlGenPrograms(GLsizei n, GLuint *programs);
\r
1080 void extGlBindProgram(GLenum target, GLuint program);
\r
1081 void extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
\r
1082 void extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string);
\r
1083 void extGlDeletePrograms(GLsizei n, const GLuint *programs);
\r
1084 void extGlProgramLocalParameter4fv(GLenum, GLuint, const GLfloat *);
\r
1085 GLhandleARB extGlCreateShaderObject(GLenum shaderType);
\r
1086 GLuint extGlCreateShader(GLenum shaderType);
\r
1087 // note: Due to the type confusion between shader_objects and OpenGL 2.0
\r
1088 // we have to add the ARB extension for proper method definitions in case
\r
1089 // that handleARB and uint are the same type
\r
1090 void extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
\r
1091 void extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
\r
1092 // note: Due to the type confusion between shader_objects and OpenGL 2.0
\r
1093 // we have to add the ARB extension for proper method definitions in case
\r
1094 // that handleARB and uint are the same type
\r
1095 void extGlCompileShaderARB(GLhandleARB shader);
\r
1096 void extGlCompileShader(GLuint shader);
\r
1097 GLhandleARB extGlCreateProgramObject(void);
\r
1098 GLuint extGlCreateProgram(void);
\r
1099 void extGlAttachObject(GLhandleARB program, GLhandleARB shader);
\r
1100 void extGlAttachShader(GLuint program, GLuint shader);
\r
1101 void extGlLinkProgramARB(GLhandleARB program);
\r
1102 // note: Due to the type confusion between shader_objects and OpenGL 2.0
\r
1103 // we have to add the ARB extension for proper method definitions in case
\r
1104 // that handleARB and uint are the same type
\r
1105 void extGlLinkProgram(GLuint program);
\r
1106 void extGlUseProgramObject(GLhandleARB prog);
\r
1107 void irrGlUseProgram(GLuint prog);
\r
1108 void extGlDeleteObject(GLhandleARB object);
\r
1109 void extGlDeleteProgram(GLuint object);
\r
1110 void extGlDeleteShader(GLuint shader);
\r
1111 void extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
\r
1112 void extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders);
\r
1113 void extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
\r
1114 void extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
\r
1115 void extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
\r
1116 void extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param);
\r
1117 void extGlGetShaderiv(GLuint shader, GLenum type, GLint *param);
\r
1118 void extGlGetProgramiv(GLuint program, GLenum type, GLint *param);
\r
1119 GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
\r
1120 GLint extGlGetUniformLocation(GLuint program, const char *name);
\r
1121 void extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v);
\r
1122 void extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v);
\r
1123 void extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v);
\r
1124 void extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v);
\r
1125 void extGlUniform1bv(GLint loc, GLsizei count, const bool *v);
\r
1126 void extGlUniform2bv(GLint loc, GLsizei count, const bool *v);
\r
1127 void extGlUniform3bv(GLint loc, GLsizei count, const bool *v);
\r
1128 void extGlUniform4bv(GLint loc, GLsizei count, const bool *v);
\r
1129 void extGlUniform1iv(GLint loc, GLsizei count, const GLint *v);
\r
1130 void extGlUniform2iv(GLint loc, GLsizei count, const GLint *v);
\r
1131 void extGlUniform3iv(GLint loc, GLsizei count, const GLint *v);
\r
1132 void extGlUniform4iv(GLint loc, GLsizei count, const GLint *v);
\r
1133 void extGlUniform1uiv(GLint loc, GLsizei count, const GLuint *v);
\r
1134 void extGlUniform2uiv(GLint loc, GLsizei count, const GLuint *v);
\r
1135 void extGlUniform3uiv(GLint loc, GLsizei count, const GLuint *v);
\r
1136 void extGlUniform4uiv(GLint loc, GLsizei count, const GLuint *v);
\r
1137 void extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1138 void extGlUniformMatrix2x3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1139 void extGlUniformMatrix2x4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1140 void extGlUniformMatrix3x2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1141 void extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1142 void extGlUniformMatrix3x4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1143 void extGlUniformMatrix4x2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1144 void extGlUniformMatrix4x3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1145 void extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
\r
1146 void extGlGetActiveUniformARB(GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
\r
1147 void extGlGetActiveUniform(GLuint program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
\r
1149 // framebuffer objects
\r
1150 void irrGlBindFramebuffer(GLenum target, GLuint framebuffer);
\r
1151 void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
\r
1152 void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers);
\r
1153 GLenum irrGlCheckFramebufferStatus(GLenum target);
\r
1154 void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
\r
1155 void irrGlBindRenderbuffer(GLenum target, GLuint renderbuffer);
\r
1156 void irrGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers);
\r
1157 void irrGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers);
\r
1158 void irrGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
\r
1159 void irrGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
\r
1160 void irrGlGenerateMipmap(GLenum target);
\r
1161 void irrGlActiveStencilFace(GLenum face);
\r
1162 void irrGlDrawBuffer(GLenum mode);
\r
1163 void irrGlDrawBuffers(GLsizei n, const GLenum *bufs);
\r
1165 // vertex buffer object
\r
1166 void extGlGenBuffers(GLsizei n, GLuint *buffers);
\r
1167 void extGlBindBuffer(GLenum target, GLuint buffer);
\r
1168 void extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
\r
1169 void extGlDeleteBuffers(GLsizei n, const GLuint *buffers);
\r
1170 void extGlBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
\r
1171 void extGlGetBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
\r
1172 void *extGlMapBuffer (GLenum target, GLenum access);
\r
1173 GLboolean extGlUnmapBuffer (GLenum target);
\r
1174 GLboolean extGlIsBuffer (GLuint buffer);
\r
1175 void extGlGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
\r
1176 void extGlGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);
\r
1177 void extGlProvokingVertex(GLenum mode);
\r
1178 void extGlProgramParameteri(GLuint program, GLenum pname, GLint value);
\r
1180 // occlusion query
\r
1181 void extGlGenQueries(GLsizei n, GLuint *ids);
\r
1182 void extGlDeleteQueries(GLsizei n, const GLuint *ids);
\r
1183 GLboolean extGlIsQuery(GLuint id);
\r
1184 void extGlBeginQuery(GLenum target, GLuint id);
\r
1185 void extGlEndQuery(GLenum target);
\r
1186 void extGlGetQueryiv(GLenum target, GLenum pname, GLint *params);
\r
1187 void extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
\r
1188 void extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
\r
1191 void irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
\r
1192 void irrGlBlendEquation(GLenum mode);
\r
1195 void irrGlEnableIndexed(GLenum target, GLuint index);
\r
1196 void irrGlDisableIndexed(GLenum target, GLuint index);
\r
1197 void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
\r
1198 void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst);
\r
1199 void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
\r
1200 void irrGlBlendEquationIndexed(GLuint buf, GLenum mode);
\r
1201 void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
\r
1203 void extGlTextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
\r
1204 void extGlTextureStorage2D(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
\r
1205 void extGlTextureStorage3D(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
\r
1206 void extGlGetTextureImage(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* pixels);
\r
1207 void extGlNamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
\r
1208 void extGlTextureParameteri(GLuint texture, GLenum pname, GLint param);
\r
1209 void extGlTextureParameterf(GLuint texture, GLenum pname, GLfloat param);
\r
1210 void extGlTextureParameteriv(GLuint texture, GLenum pname, const GLint* params);
\r
1211 void extGlTextureParameterfv(GLuint texture, GLenum pname, const GLfloat* params);
\r
1212 void extGlCreateTextures(GLenum target, GLsizei n, GLuint* textures);
\r
1213 void extGlCreateFramebuffers(GLsizei n, GLuint* framebuffers);
\r
1214 void extGlBindTextures(GLuint first, GLsizei count, const GLuint *textures, const GLenum* targets);
\r
1215 void extGlGenerateTextureMipmap(GLuint texture, GLenum target);
\r
1218 // generic vsync setting method for several extensions
\r
1219 void extGlSwapInterval(int interval);
\r
1221 // the global feature array
\r
1222 bool FeatureAvailable[IRR_OpenGL_Feature_Count];
\r
1225 COpenGLCoreFeature Feature;
\r
1227 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
1228 PFNGLACTIVETEXTUREPROC pGlActiveTexture;
\r
1229 PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
\r
1230 PFNGLCLIENTACTIVETEXTUREARBPROC pGlClientActiveTextureARB;
\r
1231 PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
\r
1232 PFNGLGENPROGRAMSNVPROC pGlGenProgramsNV;
\r
1233 PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
\r
1234 PFNGLBINDPROGRAMNVPROC pGlBindProgramNV;
\r
1235 PFNGLDELETEPROGRAMSARBPROC pGlDeleteProgramsARB;
\r
1236 PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsNV;
\r
1237 PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
\r
1238 PFNGLLOADPROGRAMNVPROC pGlLoadProgramNV;
\r
1239 PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
\r
1240 PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
\r
1241 PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
\r
1242 PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
\r
1243 PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
\r
1244 PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
\r
1245 PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
\r
1246 PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
\r
1247 PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
\r
1248 PFNGLCREATEPROGRAMPROC pGlCreateProgram;
\r
1249 PFNGLUSEPROGRAMPROC pGlUseProgram;
\r
1250 PFNGLDELETEPROGRAMPROC pGlDeleteProgram;
\r
1251 PFNGLDELETESHADERPROC pGlDeleteShader;
\r
1252 PFNGLGETATTACHEDOBJECTSARBPROC pGlGetAttachedObjectsARB;
\r
1253 PFNGLGETATTACHEDSHADERSPROC pGlGetAttachedShaders;
\r
1254 PFNGLCREATESHADERPROC pGlCreateShader;
\r
1255 PFNGLSHADERSOURCEPROC pGlShaderSource;
\r
1256 PFNGLCOMPILESHADERPROC pGlCompileShader;
\r
1257 PFNGLATTACHSHADERPROC pGlAttachShader;
\r
1258 PFNGLLINKPROGRAMPROC pGlLinkProgram;
\r
1259 PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
\r
1260 PFNGLGETSHADERINFOLOGPROC pGlGetShaderInfoLog;
\r
1261 PFNGLGETPROGRAMINFOLOGPROC pGlGetProgramInfoLog;
\r
1262 PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
\r
1263 PFNGLGETSHADERIVPROC pGlGetShaderiv;
\r
1264 PFNGLGETSHADERIVPROC pGlGetProgramiv;
\r
1265 PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
\r
1266 PFNGLGETUNIFORMLOCATIONPROC pGlGetUniformLocation;
\r
1267 PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
\r
1268 PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
\r
1269 PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
\r
1270 PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
\r
1271 PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
\r
1272 PFNGLUNIFORM2IVARBPROC pGlUniform2ivARB;
\r
1273 PFNGLUNIFORM3IVARBPROC pGlUniform3ivARB;
\r
1274 PFNGLUNIFORM4IVARBPROC pGlUniform4ivARB;
\r
1275 PFNGLUNIFORM1UIVPROC pGlUniform1uiv;
\r
1276 PFNGLUNIFORM2UIVPROC pGlUniform2uiv;
\r
1277 PFNGLUNIFORM3UIVPROC pGlUniform3uiv;
\r
1278 PFNGLUNIFORM4UIVPROC pGlUniform4uiv;
\r
1279 PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
\r
1280 PFNGLUNIFORMMATRIX2X3FVPROC pGlUniformMatrix2x3fv;
\r
1281 PFNGLUNIFORMMATRIX2X4FVPROC pGlUniformMatrix2x4fv;
\r
1282 PFNGLUNIFORMMATRIX3X2FVPROC pGlUniformMatrix3x2fv;
\r
1283 PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
\r
1284 PFNGLUNIFORMMATRIX3X4FVPROC pGlUniformMatrix3x4fv;
\r
1285 PFNGLUNIFORMMATRIX4X2FVPROC pGlUniformMatrix4x2fv;
\r
1286 PFNGLUNIFORMMATRIX4X3FVPROC pGlUniformMatrix4x3fv;
\r
1287 PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
\r
1288 PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
\r
1289 PFNGLGETACTIVEUNIFORMPROC pGlGetActiveUniform;
\r
1290 PFNGLPOINTPARAMETERFARBPROC pGlPointParameterfARB;
\r
1291 PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
\r
1292 PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
\r
1293 PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
\r
1294 PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
\r
1295 PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
\r
1296 PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
\r
1297 PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC pGlCompressedTexSubImage2D;
\r
1298 // ARB framebuffer object
\r
1299 PFNGLBINDFRAMEBUFFERPROC pGlBindFramebuffer;
\r
1300 PFNGLDELETEFRAMEBUFFERSPROC pGlDeleteFramebuffers;
\r
1301 PFNGLGENFRAMEBUFFERSPROC pGlGenFramebuffers;
\r
1302 PFNGLCHECKFRAMEBUFFERSTATUSPROC pGlCheckFramebufferStatus;
\r
1303 PFNGLFRAMEBUFFERTEXTURE2DPROC pGlFramebufferTexture2D;
\r
1304 PFNGLBINDRENDERBUFFERPROC pGlBindRenderbuffer;
\r
1305 PFNGLDELETERENDERBUFFERSPROC pGlDeleteRenderbuffers;
\r
1306 PFNGLGENRENDERBUFFERSPROC pGlGenRenderbuffers;
\r
1307 PFNGLRENDERBUFFERSTORAGEPROC pGlRenderbufferStorage;
\r
1308 PFNGLFRAMEBUFFERRENDERBUFFERPROC pGlFramebufferRenderbuffer;
\r
1309 PFNGLGENERATEMIPMAPPROC pGlGenerateMipmap;
\r
1310 // EXT framebuffer object
\r
1311 PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
\r
1312 PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
\r
1313 PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
\r
1314 PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
\r
1315 PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
\r
1316 PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
\r
1317 PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
\r
1318 PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
\r
1319 PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
\r
1320 PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
\r
1321 PFNGLGENERATEMIPMAPEXTPROC pGlGenerateMipmapEXT;
\r
1322 PFNGLACTIVESTENCILFACEEXTPROC pGlActiveStencilFaceEXT;
\r
1323 PFNGLDRAWBUFFERSARBPROC pGlDrawBuffersARB;
\r
1324 PFNGLDRAWBUFFERSATIPROC pGlDrawBuffersATI;
\r
1325 PFNGLGENBUFFERSARBPROC pGlGenBuffersARB;
\r
1326 PFNGLBINDBUFFERARBPROC pGlBindBufferARB;
\r
1327 PFNGLBUFFERDATAARBPROC pGlBufferDataARB;
\r
1328 PFNGLDELETEBUFFERSARBPROC pGlDeleteBuffersARB;
\r
1329 PFNGLBUFFERSUBDATAARBPROC pGlBufferSubDataARB;
\r
1330 PFNGLGETBUFFERSUBDATAARBPROC pGlGetBufferSubDataARB;
\r
1331 PFNGLMAPBUFFERARBPROC pGlMapBufferARB;
\r
1332 PFNGLUNMAPBUFFERARBPROC pGlUnmapBufferARB;
\r
1333 PFNGLISBUFFERARBPROC pGlIsBufferARB;
\r
1334 PFNGLGETBUFFERPARAMETERIVARBPROC pGlGetBufferParameterivARB;
\r
1335 PFNGLGETBUFFERPOINTERVARBPROC pGlGetBufferPointervARB;
\r
1336 PFNGLPROVOKINGVERTEXPROC pGlProvokingVertexARB;
\r
1337 PFNGLPROVOKINGVERTEXEXTPROC pGlProvokingVertexEXT;
\r
1338 PFNGLPROGRAMPARAMETERIARBPROC pGlProgramParameteriARB;
\r
1339 PFNGLPROGRAMPARAMETERIEXTPROC pGlProgramParameteriEXT;
\r
1340 PFNGLGENQUERIESARBPROC pGlGenQueriesARB;
\r
1341 PFNGLDELETEQUERIESARBPROC pGlDeleteQueriesARB;
\r
1342 PFNGLISQUERYARBPROC pGlIsQueryARB;
\r
1343 PFNGLBEGINQUERYARBPROC pGlBeginQueryARB;
\r
1344 PFNGLENDQUERYARBPROC pGlEndQueryARB;
\r
1345 PFNGLGETQUERYIVARBPROC pGlGetQueryivARB;
\r
1346 PFNGLGETQUERYOBJECTIVARBPROC pGlGetQueryObjectivARB;
\r
1347 PFNGLGETQUERYOBJECTUIVARBPROC pGlGetQueryObjectuivARB;
\r
1348 PFNGLGENOCCLUSIONQUERIESNVPROC pGlGenOcclusionQueriesNV;
\r
1349 PFNGLDELETEOCCLUSIONQUERIESNVPROC pGlDeleteOcclusionQueriesNV;
\r
1350 PFNGLISOCCLUSIONQUERYNVPROC pGlIsOcclusionQueryNV;
\r
1351 PFNGLBEGINOCCLUSIONQUERYNVPROC pGlBeginOcclusionQueryNV;
\r
1352 PFNGLENDOCCLUSIONQUERYNVPROC pGlEndOcclusionQueryNV;
\r
1353 PFNGLGETOCCLUSIONQUERYIVNVPROC pGlGetOcclusionQueryivNV;
\r
1354 PFNGLGETOCCLUSIONQUERYUIVNVPROC pGlGetOcclusionQueryuivNV;
\r
1356 PFNGLBLENDFUNCSEPARATEEXTPROC pGlBlendFuncSeparateEXT;
\r
1357 PFNGLBLENDFUNCSEPARATEPROC pGlBlendFuncSeparate;
\r
1358 PFNGLBLENDEQUATIONEXTPROC pGlBlendEquationEXT;
\r
1359 PFNGLBLENDEQUATIONPROC pGlBlendEquation;
\r
1360 PFNGLBLENDEQUATIONSEPARATEEXTPROC pGlBlendEquationSeparateEXT;
\r
1361 PFNGLBLENDEQUATIONSEPARATEPROC pGlBlendEquationSeparate;
\r
1363 PFNGLENABLEINDEXEDEXTPROC pGlEnableIndexedEXT;
\r
1364 PFNGLDISABLEINDEXEDEXTPROC pGlDisableIndexedEXT;
\r
1365 PFNGLCOLORMASKINDEXEDEXTPROC pGlColorMaskIndexedEXT;
\r
1366 PFNGLBLENDFUNCINDEXEDAMDPROC pGlBlendFuncIndexedAMD;
\r
1367 PFNGLBLENDFUNCIPROC pGlBlendFunciARB;
\r
1368 PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC pGlBlendFuncSeparateIndexedAMD;
\r
1369 PFNGLBLENDFUNCSEPARATEIPROC pGlBlendFuncSeparateiARB;
\r
1370 PFNGLBLENDEQUATIONINDEXEDAMDPROC pGlBlendEquationIndexedAMD;
\r
1371 PFNGLBLENDEQUATIONIPROC pGlBlendEquationiARB;
\r
1372 PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC pGlBlendEquationSeparateIndexedAMD;
\r
1373 PFNGLBLENDEQUATIONSEPARATEIPROC pGlBlendEquationSeparateiARB;
\r
1376 PFNGLTEXTURESTORAGE2DPROC pGlTextureStorage2D;
\r
1377 PFNGLTEXTURESTORAGE3DPROC pGlTextureStorage3D;
\r
1378 PFNGLTEXTURESUBIMAGE2DPROC pGlTextureSubImage2D;
\r
1379 PFNGLGETTEXTUREIMAGEPROC pGlGetTextureImage;
\r
1380 PFNGLNAMEDFRAMEBUFFERTEXTUREPROC pGlNamedFramebufferTexture;
\r
1381 PFNGLTEXTUREPARAMETERIPROC pGlTextureParameteri;
\r
1382 PFNGLTEXTUREPARAMETERFPROC pGlTextureParameterf;
\r
1383 PFNGLTEXTUREPARAMETERIVPROC pGlTextureParameteriv;
\r
1384 PFNGLTEXTUREPARAMETERFVPROC pGlTextureParameterfv;
\r
1386 PFNGLCREATETEXTURESPROC pGlCreateTextures;
\r
1387 PFNGLCREATEFRAMEBUFFERSPROC pGlCreateFramebuffers;
\r
1388 PFNGLBINDTEXTURESPROC pGlBindTextures;
\r
1389 PFNGLGENERATETEXTUREMIPMAPPROC pGlGenerateTextureMipmap;
\r
1390 // DSA with EXT or functions to simulate it
\r
1391 PFNGLTEXTURESTORAGE2DEXTPROC pGlTextureStorage2DEXT;
\r
1392 PFNGLTEXSTORAGE2DPROC pGlTexStorage2D;
\r
1393 PFNGLTEXTURESTORAGE3DEXTPROC pGlTextureStorage3DEXT;
\r
1394 PFNGLTEXSTORAGE3DPROC pGlTexStorage3D;
\r
1395 PFNGLTEXTURESUBIMAGE2DEXTPROC pGlTextureSubImage2DEXT;
\r
1396 PFNGLGETTEXTUREIMAGEEXTPROC pGlGetTextureImageEXT;
\r
1397 PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC pGlNamedFramebufferTextureEXT;
\r
1398 PFNGLFRAMEBUFFERTEXTUREPROC pGlFramebufferTexture;
\r
1399 PFNGLGENERATETEXTUREMIPMAPEXTPROC pGlGenerateTextureMipmapEXT;
\r
1401 #if defined(WGL_EXT_swap_control)
\r
1402 PFNWGLSWAPINTERVALEXTPROC pWglSwapIntervalEXT;
\r
1404 #if defined(GLX_SGI_swap_control)
\r
1405 PFNGLXSWAPINTERVALSGIPROC pGlxSwapIntervalSGI;
\r
1407 #if defined(GLX_EXT_swap_control)
\r
1408 PFNGLXSWAPINTERVALEXTPROC pGlxSwapIntervalEXT;
\r
1410 #if defined(GLX_MESA_swap_control)
\r
1411 PFNGLXSWAPINTERVALMESAPROC pGlxSwapIntervalMESA;
\r
1416 inline void COpenGLExtensionHandler::irrGlActiveTexture(GLenum texture)
\r
1418 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1419 if (pGlActiveTexture)
\r
1420 pGlActiveTexture(texture);
\r
1421 else if (pGlActiveTextureARB)
\r
1422 pGlActiveTextureARB(texture);
\r
1424 #ifdef GL_ARB_multitexture
\r
1425 glActiveTextureARB(texture);
\r
1427 glActiveTexture(texture);
\r
1432 inline void COpenGLExtensionHandler::irrGlClientActiveTexture(GLenum texture)
\r
1434 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1435 if (pGlClientActiveTextureARB)
\r
1436 pGlClientActiveTextureARB(texture);
\r
1438 glClientActiveTextureARB(texture);
\r
1442 inline void COpenGLExtensionHandler::extGlGenPrograms(GLsizei n, GLuint *programs)
\r
1445 memset(programs,0,n*sizeof(GLuint));
\r
1446 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1447 if (pGlGenProgramsARB)
\r
1448 pGlGenProgramsARB(n, programs);
\r
1449 else if (pGlGenProgramsNV)
\r
1450 pGlGenProgramsNV(n, programs);
\r
1451 #elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
\r
1452 glGenProgramsARB(n,programs);
\r
1453 #elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
\r
1454 glGenProgramsNV(n,programs);
\r
1456 os::Printer::log("glGenPrograms not supported", ELL_ERROR);
\r
1460 inline void COpenGLExtensionHandler::extGlBindProgram(GLenum target, GLuint program)
\r
1462 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1463 if (pGlBindProgramARB)
\r
1464 pGlBindProgramARB(target, program);
\r
1465 else if (pGlBindProgramNV)
\r
1466 pGlBindProgramNV(target, program);
\r
1467 #elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
\r
1468 glBindProgramARB(target, program);
\r
1469 #elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
\r
1470 glBindProgramNV(target, program);
\r
1472 os::Printer::log("glBindProgram not supported", ELL_ERROR);
\r
1476 inline void COpenGLExtensionHandler::extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string)
\r
1478 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1479 if (pGlProgramStringARB)
\r
1480 pGlProgramStringARB(target, format, len, string);
\r
1481 #elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
\r
1482 glProgramStringARB(target,format,len,string);
\r
1484 os::Printer::log("glProgramString not supported", ELL_ERROR);
\r
1488 inline void COpenGLExtensionHandler::extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string)
\r
1490 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1491 if (pGlLoadProgramNV)
\r
1492 pGlLoadProgramNV(target, id, len, string);
\r
1493 #elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
\r
1494 glLoadProgramNV(target,id,len,string);
\r
1496 os::Printer::log("glLoadProgram not supported", ELL_ERROR);
\r
1500 inline void COpenGLExtensionHandler::extGlDeletePrograms(GLsizei n, const GLuint *programs)
\r
1502 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1503 if (pGlDeleteProgramsARB)
\r
1504 pGlDeleteProgramsARB(n, programs);
\r
1505 else if (pGlDeleteProgramsNV)
\r
1506 pGlDeleteProgramsNV(n, programs);
\r
1507 #elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
\r
1508 glDeleteProgramsARB(n,programs);
\r
1509 #elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
\r
1510 glDeleteProgramsNV(n,programs);
\r
1512 os::Printer::log("glDeletePrograms not supported", ELL_ERROR);
\r
1516 inline void COpenGLExtensionHandler::extGlProgramLocalParameter4fv(GLenum n, GLuint i, const GLfloat *f)
\r
1518 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1519 if (pGlProgramLocalParameter4fvARB)
\r
1520 pGlProgramLocalParameter4fvARB(n,i,f);
\r
1521 #elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
\r
1522 glProgramLocalParameter4fvARB(n,i,f);
\r
1524 os::Printer::log("glProgramLocalParameter4fv not supported", ELL_ERROR);
\r
1528 inline GLhandleARB COpenGLExtensionHandler::extGlCreateShaderObject(GLenum shaderType)
\r
1530 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1531 if (pGlCreateShaderObjectARB)
\r
1532 return pGlCreateShaderObjectARB(shaderType);
\r
1533 #elif defined(GL_ARB_shader_objects)
\r
1534 return glCreateShaderObjectARB(shaderType);
\r
1536 os::Printer::log("glCreateShaderObject not supported", ELL_ERROR);
\r
1541 inline GLuint COpenGLExtensionHandler::extGlCreateShader(GLenum shaderType)
\r
1543 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1544 if (pGlCreateShader)
\r
1545 return pGlCreateShader(shaderType);
\r
1546 #elif defined(GL_VERSION_2_0)
\r
1547 return glCreateShader(shaderType);
\r
1549 os::Printer::log("glCreateShader not supported", ELL_ERROR);
\r
1554 inline void COpenGLExtensionHandler::extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
\r
1556 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1557 if (pGlShaderSourceARB)
\r
1558 pGlShaderSourceARB(shader, numOfStrings, strings, lenOfStrings);
\r
1559 #elif defined(GL_ARB_shader_objects)
\r
1560 glShaderSourceARB(shader, numOfStrings, strings, (GLint *)lenOfStrings);
\r
1562 os::Printer::log("glShaderSource not supported", ELL_ERROR);
\r
1566 inline void COpenGLExtensionHandler::extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
\r
1568 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1569 if (pGlShaderSource)
\r
1570 pGlShaderSource(shader, numOfStrings, strings, lenOfStrings);
\r
1571 #elif defined(GL_VERSION_2_0)
\r
1572 glShaderSource(shader, numOfStrings, strings, (GLint *)lenOfStrings);
\r
1574 os::Printer::log("glShaderSource not supported", ELL_ERROR);
\r
1578 inline void COpenGLExtensionHandler::extGlCompileShaderARB(GLhandleARB shader)
\r
1580 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1581 if (pGlCompileShaderARB)
\r
1582 pGlCompileShaderARB(shader);
\r
1583 #elif defined(GL_ARB_shader_objects)
\r
1584 glCompileShaderARB(shader);
\r
1586 os::Printer::log("glCompileShader not supported", ELL_ERROR);
\r
1590 inline void COpenGLExtensionHandler::extGlCompileShader(GLuint shader)
\r
1592 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1593 if (pGlCompileShader)
\r
1594 pGlCompileShader(shader);
\r
1595 #elif defined(GL_VERSION_2_0)
\r
1596 glCompileShader(shader);
\r
1598 os::Printer::log("glCompileShader not supported", ELL_ERROR);
\r
1602 inline GLhandleARB COpenGLExtensionHandler::extGlCreateProgramObject(void)
\r
1604 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1605 if (pGlCreateProgramObjectARB)
\r
1606 return pGlCreateProgramObjectARB();
\r
1607 #elif defined(GL_ARB_shader_objects)
\r
1608 return glCreateProgramObjectARB();
\r
1610 os::Printer::log("glCreateProgramObject not supported", ELL_ERROR);
\r
1615 inline GLuint COpenGLExtensionHandler::extGlCreateProgram(void)
\r
1617 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1618 if (pGlCreateProgram)
\r
1619 return pGlCreateProgram();
\r
1620 #elif defined(GL_VERSION_2_0)
\r
1621 return glCreateProgram();
\r
1623 os::Printer::log("glCreateProgram not supported", ELL_ERROR);
\r
1628 inline void COpenGLExtensionHandler::extGlAttachObject(GLhandleARB program, GLhandleARB shader)
\r
1630 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1631 if (pGlAttachObjectARB)
\r
1632 pGlAttachObjectARB(program, shader);
\r
1633 #elif defined(GL_ARB_shader_objects)
\r
1634 glAttachObjectARB(program, shader);
\r
1636 os::Printer::log("glAttachObject not supported", ELL_ERROR);
\r
1640 inline void COpenGLExtensionHandler::extGlAttachShader(GLuint program, GLuint shader)
\r
1642 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1643 if (pGlAttachShader)
\r
1644 pGlAttachShader(program, shader);
\r
1645 #elif defined(GL_VERSION_2_0)
\r
1646 glAttachShader(program, shader);
\r
1648 os::Printer::log("glAttachShader not supported", ELL_ERROR);
\r
1652 inline void COpenGLExtensionHandler::extGlLinkProgramARB(GLhandleARB program)
\r
1654 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1655 if (pGlLinkProgramARB)
\r
1656 pGlLinkProgramARB(program);
\r
1657 #elif defined(GL_ARB_shader_objects)
\r
1658 glLinkProgramARB(program);
\r
1660 os::Printer::log("glLinkProgram not supported", ELL_ERROR);
\r
1664 inline void COpenGLExtensionHandler::extGlLinkProgram(GLuint program)
\r
1666 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1667 if (pGlLinkProgram)
\r
1668 pGlLinkProgram(program);
\r
1669 #elif defined(GL_VERSION_2_0)
\r
1670 glLinkProgram(program);
\r
1672 os::Printer::log("glLinkProgram not supported", ELL_ERROR);
\r
1676 inline void COpenGLExtensionHandler::extGlUseProgramObject(GLhandleARB prog)
\r
1678 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1679 if (pGlUseProgramObjectARB)
\r
1680 pGlUseProgramObjectARB(prog);
\r
1681 #elif defined(GL_ARB_shader_objects)
\r
1682 glUseProgramObjectARB(prog);
\r
1684 os::Printer::log("glUseProgramObject not supported", ELL_ERROR);
\r
1688 inline void COpenGLExtensionHandler::irrGlUseProgram(GLuint prog)
\r
1690 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1691 if (pGlUseProgram)
\r
1692 pGlUseProgram(prog);
\r
1693 #elif defined(GL_VERSION_2_0)
\r
1694 glUseProgram(prog);
\r
1696 os::Printer::log("glUseProgram not supported", ELL_ERROR);
\r
1700 inline void COpenGLExtensionHandler::extGlDeleteObject(GLhandleARB object)
\r
1702 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1703 if (pGlDeleteObjectARB)
\r
1704 pGlDeleteObjectARB(object);
\r
1705 #elif defined(GL_ARB_shader_objects)
\r
1706 glDeleteObjectARB(object);
\r
1708 os::Printer::log("glDeleteObject not supported", ELL_ERROR);
\r
1712 inline void COpenGLExtensionHandler::extGlDeleteProgram(GLuint object)
\r
1714 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1715 if (pGlDeleteProgram)
\r
1716 pGlDeleteProgram(object);
\r
1717 #elif defined(GL_VERSION_2_0)
\r
1718 glDeleteProgram(object);
\r
1720 os::Printer::log("glDeleteProgram not supported", ELL_ERROR);
\r
1724 inline void COpenGLExtensionHandler::extGlDeleteShader(GLuint shader)
\r
1726 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1727 if (pGlDeleteShader)
\r
1728 pGlDeleteShader(shader);
\r
1729 #elif defined(GL_VERSION_2_0)
\r
1730 glDeleteShader(shader);
\r
1732 os::Printer::log("glDeleteShader not supported", ELL_ERROR);
\r
1736 inline void COpenGLExtensionHandler::extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders)
\r
1740 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1741 if (pGlGetAttachedObjectsARB)
\r
1742 pGlGetAttachedObjectsARB(program, maxcount, count, shaders);
\r
1743 #elif defined(GL_ARB_shader_objects)
\r
1744 glGetAttachedObjectsARB(program, maxcount, count, shaders);
\r
1746 os::Printer::log("glGetAttachedObjects not supported", ELL_ERROR);
\r
1750 inline void COpenGLExtensionHandler::extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
\r
1754 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1755 if (pGlGetAttachedShaders)
\r
1756 pGlGetAttachedShaders(program, maxcount, count, shaders);
\r
1757 #elif defined(GL_VERSION_2_0)
\r
1758 glGetAttachedShaders(program, maxcount, count, shaders);
\r
1760 os::Printer::log("glGetAttachedShaders not supported", ELL_ERROR);
\r
1764 inline void COpenGLExtensionHandler::extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog)
\r
1768 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1769 if (pGlGetInfoLogARB)
\r
1770 pGlGetInfoLogARB(object, maxLength, length, infoLog);
\r
1771 #elif defined(GL_ARB_shader_objects)
\r
1772 glGetInfoLogARB(object, maxLength, length, infoLog);
\r
1774 os::Printer::log("glGetInfoLog not supported", ELL_ERROR);
\r
1778 inline void COpenGLExtensionHandler::extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
\r
1782 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1783 if (pGlGetShaderInfoLog)
\r
1784 pGlGetShaderInfoLog(shader, maxLength, length, infoLog);
\r
1785 #elif defined(GL_VERSION_2_0)
\r
1786 glGetShaderInfoLog(shader, maxLength, length, infoLog);
\r
1788 os::Printer::log("glGetShaderInfoLog not supported", ELL_ERROR);
\r
1792 inline void COpenGLExtensionHandler::extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
\r
1796 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1797 if (pGlGetProgramInfoLog)
\r
1798 pGlGetProgramInfoLog(program, maxLength, length, infoLog);
\r
1799 #elif defined(GL_VERSION_2_0)
\r
1800 glGetProgramInfoLog(program, maxLength, length, infoLog);
\r
1802 os::Printer::log("glGetProgramInfoLog not supported", ELL_ERROR);
\r
1806 inline void COpenGLExtensionHandler::extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param)
\r
1808 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1809 if (pGlGetObjectParameterivARB)
\r
1810 pGlGetObjectParameterivARB(object, type, param);
\r
1811 #elif defined(GL_ARB_shader_objects)
\r
1812 glGetObjectParameterivARB(object, type, param);
\r
1814 os::Printer::log("glGetObjectParameteriv not supported", ELL_ERROR);
\r
1818 inline void COpenGLExtensionHandler::extGlGetShaderiv(GLuint shader, GLenum type, GLint *param)
\r
1820 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1821 if (pGlGetShaderiv)
\r
1822 pGlGetShaderiv(shader, type, param);
\r
1823 #elif defined(GL_VERSION_2_0)
\r
1824 glGetShaderiv(shader, type, param);
\r
1826 os::Printer::log("glGetShaderiv not supported", ELL_ERROR);
\r
1830 inline void COpenGLExtensionHandler::extGlGetProgramiv(GLuint program, GLenum type, GLint *param)
\r
1832 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1833 if (pGlGetProgramiv)
\r
1834 pGlGetProgramiv(program, type, param);
\r
1835 #elif defined(GL_VERSION_2_0)
\r
1836 glGetProgramiv(program, type, param);
\r
1838 os::Printer::log("glGetProgramiv not supported", ELL_ERROR);
\r
1842 inline GLint COpenGLExtensionHandler::extGlGetUniformLocationARB(GLhandleARB program, const char *name)
\r
1844 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1845 if (pGlGetUniformLocationARB)
\r
1846 return pGlGetUniformLocationARB(program, name);
\r
1847 #elif defined(GL_ARB_shader_objects)
\r
1848 return glGetUniformLocationARB(program, name);
\r
1850 os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
\r
1855 inline GLint COpenGLExtensionHandler::extGlGetUniformLocation(GLuint program, const char *name)
\r
1857 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1858 if (pGlGetUniformLocation)
\r
1859 return pGlGetUniformLocation(program, name);
\r
1860 #elif defined(GL_VERSION_2_0)
\r
1861 return glGetUniformLocation(program, name);
\r
1863 os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
\r
1868 inline void COpenGLExtensionHandler::extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v)
\r
1870 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1871 if (pGlUniform1fvARB)
\r
1872 pGlUniform1fvARB(loc, count, v);
\r
1873 #elif defined(GL_ARB_shader_objects)
\r
1874 glUniform1fvARB(loc, count, v);
\r
1876 os::Printer::log("glUniform1fv not supported", ELL_ERROR);
\r
1880 inline void COpenGLExtensionHandler::extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v)
\r
1882 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1883 if (pGlUniform2fvARB)
\r
1884 pGlUniform2fvARB(loc, count, v);
\r
1885 #elif defined(GL_ARB_shader_objects)
\r
1886 glUniform2fvARB(loc, count, v);
\r
1888 os::Printer::log("glUniform2fv not supported", ELL_ERROR);
\r
1892 inline void COpenGLExtensionHandler::extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v)
\r
1894 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1895 if (pGlUniform3fvARB)
\r
1896 pGlUniform3fvARB(loc, count, v);
\r
1897 #elif defined(GL_ARB_shader_objects)
\r
1898 glUniform3fvARB(loc, count, v);
\r
1900 os::Printer::log("glUniform3fv not supported", ELL_ERROR);
\r
1904 inline void COpenGLExtensionHandler::extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v)
\r
1906 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1907 if (pGlUniform4fvARB)
\r
1908 pGlUniform4fvARB(loc, count, v);
\r
1909 #elif defined(GL_ARB_shader_objects)
\r
1910 glUniform4fvARB(loc, count, v);
\r
1912 os::Printer::log("glUniform4fv not supported", ELL_ERROR);
\r
1916 inline void COpenGLExtensionHandler::extGlUniform1uiv(GLint loc, GLsizei count, const GLuint *v)
\r
1918 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1919 if (pGlUniform1uiv)
\r
1920 pGlUniform1uiv(loc, count, v);
\r
1921 #elif defined(GL_VERSION_3_0)
\r
1922 glUniform1uiv(loc, count, v);
\r
1926 inline void COpenGLExtensionHandler::extGlUniform2uiv(GLint loc, GLsizei count, const GLuint *v)
\r
1928 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1929 if (pGlUniform2uiv)
\r
1930 pGlUniform2uiv(loc, count, v);
\r
1931 #elif defined(GL_VERSION_3_0)
\r
1932 glUniform2uiv(loc, count, v);
\r
1936 inline void COpenGLExtensionHandler::extGlUniform3uiv(GLint loc, GLsizei count, const GLuint *v)
\r
1938 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1939 if (pGlUniform3uiv)
\r
1940 pGlUniform3uiv(loc, count, v);
\r
1941 #elif defined(GL_VERSION_3_0)
\r
1942 glUniform3uiv(loc, count, v);
\r
1946 inline void COpenGLExtensionHandler::extGlUniform4uiv(GLint loc, GLsizei count, const GLuint *v)
\r
1948 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1949 if (pGlUniform4uiv)
\r
1950 pGlUniform4uiv(loc, count, v);
\r
1951 #elif defined(GL_VERSION_3_0)
\r
1952 glUniform4uiv(loc, count, v);
\r
1956 inline void COpenGLExtensionHandler::extGlUniform1iv(GLint loc, GLsizei count, const GLint *v)
\r
1958 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1959 if (pGlUniform1ivARB)
\r
1960 pGlUniform1ivARB(loc, count, v);
\r
1961 #elif defined(GL_ARB_shader_objects)
\r
1962 glUniform1ivARB(loc, count, v);
\r
1964 os::Printer::log("glUniform1iv not supported", ELL_ERROR);
\r
1968 inline void COpenGLExtensionHandler::extGlUniform2iv(GLint loc, GLsizei count, const GLint *v)
\r
1970 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1971 if (pGlUniform2ivARB)
\r
1972 pGlUniform2ivARB(loc, count, v);
\r
1973 #elif defined(GL_ARB_shader_objects)
\r
1974 glUniform2ivARB(loc, count, v);
\r
1976 os::Printer::log("glUniform2iv not supported", ELL_ERROR);
\r
1980 inline void COpenGLExtensionHandler::extGlUniform3iv(GLint loc, GLsizei count, const GLint *v)
\r
1982 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1983 if (pGlUniform3ivARB)
\r
1984 pGlUniform3ivARB(loc, count, v);
\r
1985 #elif defined(GL_ARB_shader_objects)
\r
1986 glUniform3ivARB(loc, count, v);
\r
1988 os::Printer::log("glUniform3iv not supported", ELL_ERROR);
\r
1992 inline void COpenGLExtensionHandler::extGlUniform4iv(GLint loc, GLsizei count, const GLint *v)
\r
1994 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
1995 if (pGlUniform4ivARB)
\r
1996 pGlUniform4ivARB(loc, count, v);
\r
1997 #elif defined(GL_ARB_shader_objects)
\r
1998 glUniform4ivARB(loc, count, v);
\r
2000 os::Printer::log("glUniform4iv not supported", ELL_ERROR);
\r
2004 inline void COpenGLExtensionHandler::extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
\r
2006 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2007 if (pGlUniformMatrix2fvARB)
\r
2008 pGlUniformMatrix2fvARB(loc, count, transpose, v);
\r
2009 #elif defined(GL_ARB_shader_objects)
\r
2010 glUniformMatrix2fvARB(loc, count, transpose, v);
\r
2012 os::Printer::log("glUniformMatrix2fv not supported", ELL_ERROR);
\r
2016 inline void COpenGLExtensionHandler::extGlUniformMatrix2x3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* v)
\r
2018 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2019 if (pGlUniformMatrix2x3fv)
\r
2020 pGlUniformMatrix2x3fv(loc, count, transpose, v);
\r
2022 os::Printer::log("glUniformMatrix2x3fv not supported", ELL_ERROR);
\r
2026 inline void COpenGLExtensionHandler::extGlUniformMatrix2x4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* v)
\r
2028 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2029 if (pGlUniformMatrix2x4fv)
\r
2030 pGlUniformMatrix2x4fv(loc, count, transpose, v);
\r
2032 os::Printer::log("glUniformMatrix2x4fv not supported", ELL_ERROR);
\r
2036 inline void COpenGLExtensionHandler::extGlUniformMatrix3x2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* v)
\r
2038 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2039 if (pGlUniformMatrix3x2fv)
\r
2040 pGlUniformMatrix3x2fv(loc, count, transpose, v);
\r
2042 os::Printer::log("glUniformMatrix3x2fv not supported", ELL_ERROR);
\r
2046 inline void COpenGLExtensionHandler::extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
\r
2048 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2049 if (pGlUniformMatrix3fvARB)
\r
2050 pGlUniformMatrix3fvARB(loc, count, transpose, v);
\r
2051 #elif defined(GL_ARB_shader_objects)
\r
2052 glUniformMatrix3fvARB(loc, count, transpose, v);
\r
2054 os::Printer::log("glUniformMatrix3fv not supported", ELL_ERROR);
\r
2058 inline void COpenGLExtensionHandler::extGlUniformMatrix3x4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* v)
\r
2060 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2061 if (pGlUniformMatrix3x4fv)
\r
2062 pGlUniformMatrix3x4fv(loc, count, transpose, v);
\r
2064 os::Printer::log("glUniformMatrix3x4fv not supported", ELL_ERROR);
\r
2068 inline void COpenGLExtensionHandler::extGlUniformMatrix4x2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* v)
\r
2070 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2071 if (pGlUniformMatrix4x2fv)
\r
2072 pGlUniformMatrix4x2fv(loc, count, transpose, v);
\r
2074 os::Printer::log("glUniformMatrix4x2fv not supported", ELL_ERROR);
\r
2078 inline void COpenGLExtensionHandler::extGlUniformMatrix4x3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* v)
\r
2080 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2081 if (pGlUniformMatrix4x3fv)
\r
2082 pGlUniformMatrix4x3fv(loc, count, transpose, v);
\r
2084 os::Printer::log("glUniformMatrix4x3fv not supported", ELL_ERROR);
\r
2088 inline void COpenGLExtensionHandler::extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
\r
2090 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2091 if (pGlUniformMatrix4fvARB)
\r
2092 pGlUniformMatrix4fvARB(loc, count, transpose, v);
\r
2093 #elif defined(GL_ARB_shader_objects)
\r
2094 glUniformMatrix4fvARB(loc, count, transpose, v);
\r
2096 os::Printer::log("glUniformMatrix4fv not supported", ELL_ERROR);
\r
2100 inline void COpenGLExtensionHandler::extGlGetActiveUniformARB(GLhandleARB program,
\r
2101 GLuint index, GLsizei maxlength, GLsizei *length,
\r
2102 GLint *size, GLenum *type, GLcharARB *name)
\r
2106 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2107 if (pGlGetActiveUniformARB)
\r
2108 pGlGetActiveUniformARB(program, index, maxlength, length, size, type, name);
\r
2109 #elif defined(GL_ARB_shader_objects)
\r
2110 glGetActiveUniformARB(program, index, maxlength, length, size, type, name);
\r
2112 os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
\r
2116 inline void COpenGLExtensionHandler::extGlGetActiveUniform(GLuint program,
\r
2117 GLuint index, GLsizei maxlength, GLsizei *length,
\r
2118 GLint *size, GLenum *type, GLchar *name)
\r
2122 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2123 if (pGlGetActiveUniform)
\r
2124 pGlGetActiveUniform(program, index, maxlength, length, size, type, name);
\r
2125 #elif defined(GL_VERSION_2_0)
\r
2126 glGetActiveUniform(program, index, maxlength, length, size, type, name);
\r
2128 os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
\r
2132 inline void COpenGLExtensionHandler::extGlPointParameterf(GLint loc, GLfloat f)
\r
2134 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2135 if (pGlPointParameterfARB)
\r
2136 pGlPointParameterfARB(loc, f);
\r
2137 #elif defined(GL_ARB_point_parameters)
\r
2138 glPointParameterfARB(loc, f);
\r
2140 os::Printer::log("glPointParameterf not supported", ELL_ERROR);
\r
2144 inline void COpenGLExtensionHandler::extGlPointParameterfv(GLint loc, const GLfloat *v)
\r
2146 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2147 if (pGlPointParameterfvARB)
\r
2148 pGlPointParameterfvARB(loc, v);
\r
2149 #elif defined(GL_ARB_point_parameters)
\r
2150 glPointParameterfvARB(loc, v);
\r
2152 os::Printer::log("glPointParameterfv not supported", ELL_ERROR);
\r
2156 inline void COpenGLExtensionHandler::extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
\r
2158 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2159 if (pGlStencilFuncSeparate)
\r
2160 pGlStencilFuncSeparate(frontfunc, backfunc, ref, mask);
\r
2161 else if (pGlStencilFuncSeparateATI)
\r
2162 pGlStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
\r
2163 #elif defined(GL_VERSION_2_0)
\r
2164 glStencilFuncSeparate(frontfunc, backfunc, ref, mask);
\r
2165 #elif defined(GL_ATI_separate_stencil)
\r
2166 glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
\r
2168 os::Printer::log("glStencilFuncSeparate not supported", ELL_ERROR);
\r
2172 inline void COpenGLExtensionHandler::extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
\r
2174 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2175 if (pGlStencilOpSeparate)
\r
2176 pGlStencilOpSeparate(face, fail, zfail, zpass);
\r
2177 else if (pGlStencilOpSeparateATI)
\r
2178 pGlStencilOpSeparateATI(face, fail, zfail, zpass);
\r
2179 #elif defined(GL_VERSION_2_0)
\r
2180 glStencilOpSeparate(face, fail, zfail, zpass);
\r
2181 #elif defined(GL_ATI_separate_stencil)
\r
2182 glStencilOpSeparateATI(face, fail, zfail, zpass);
\r
2184 os::Printer::log("glStencilOpSeparate not supported", ELL_ERROR);
\r
2188 inline void COpenGLExtensionHandler::irrGlCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width,
\r
2189 GLsizei height, GLint border, GLsizei imageSize, const void* data)
\r
2191 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2192 if (pGlCompressedTexImage2D)
\r
2193 pGlCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
\r
2194 #elif defined(GL_ARB_texture_compression)
\r
2195 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
\r
2197 os::Printer::log("glCompressedTexImage2D not supported", ELL_ERROR);
\r
2201 inline void COpenGLExtensionHandler::irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
\r
2202 GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
\r
2204 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2205 if (pGlCompressedTexSubImage2D)
\r
2206 pGlCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
\r
2207 #elif defined(GL_ARB_texture_compression)
\r
2208 glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
\r
2210 os::Printer::log("glCompressedTexSubImage2D not supported", ELL_ERROR);
\r
2214 inline void COpenGLExtensionHandler::irrGlBindFramebuffer(GLenum target, GLuint framebuffer)
\r
2216 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2217 if (pGlBindFramebuffer)
\r
2218 pGlBindFramebuffer(target, framebuffer);
\r
2219 else if (pGlBindFramebufferEXT)
\r
2220 pGlBindFramebufferEXT(target, framebuffer);
\r
2221 #elif defined(GL_ARB_framebuffer_object)
\r
2222 glBindFramebuffer(target, framebuffer);
\r
2223 #elif defined(GL_EXT_framebuffer_object)
\r
2224 glBindFramebufferEXT(target, framebuffer);
\r
2226 os::Printer::log("glBindFramebuffer not supported", ELL_ERROR);
\r
2230 inline void COpenGLExtensionHandler::irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
\r
2232 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2233 if (pGlDeleteFramebuffers)
\r
2234 pGlDeleteFramebuffers(n, framebuffers);
\r
2235 else if (pGlDeleteFramebuffersEXT)
\r
2236 pGlDeleteFramebuffersEXT(n, framebuffers);
\r
2237 #elif defined(GL_ARB_framebuffer_object)
\r
2238 glDeleteFramebuffers(n, framebuffers);
\r
2239 #elif defined(GL_EXT_framebuffer_object)
\r
2240 glDeleteFramebuffersEXT(n, framebuffers);
\r
2242 os::Printer::log("glDeleteFramebuffers not supported", ELL_ERROR);
\r
2246 inline void COpenGLExtensionHandler::irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
\r
2249 memset(framebuffers,0,n*sizeof(GLuint));
\r
2250 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2251 if (pGlGenFramebuffers)
\r
2252 pGlGenFramebuffers(n, framebuffers);
\r
2253 else if (pGlGenFramebuffersEXT)
\r
2254 pGlGenFramebuffersEXT(n, framebuffers);
\r
2255 #elif defined(GL_ARB_framebuffer_object)
\r
2256 glGenFramebuffers(n, framebuffers);
\r
2257 #elif defined(GL_EXT_framebuffer_object)
\r
2258 glGenFramebuffersEXT(n, framebuffers);
\r
2260 os::Printer::log("glGenFramebuffers not supported", ELL_ERROR);
\r
2264 inline GLenum COpenGLExtensionHandler::irrGlCheckFramebufferStatus(GLenum target)
\r
2266 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2267 if (pGlCheckFramebufferStatus)
\r
2268 return pGlCheckFramebufferStatus(target);
\r
2269 else if (pGlCheckFramebufferStatusEXT)
\r
2270 return pGlCheckFramebufferStatusEXT(target);
\r
2273 #elif defined(GL_ARB_framebuffer_object)
\r
2274 return glCheckFramebufferStatus(target);
\r
2275 #elif defined(GL_EXT_framebuffer_object)
\r
2276 return glCheckFramebufferStatusEXT(target);
\r
2278 os::Printer::log("glCheckFramebufferStatus not supported", ELL_ERROR);
\r
2283 inline void COpenGLExtensionHandler::irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
\r
2285 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2286 if (pGlFramebufferTexture2D)
\r
2287 pGlFramebufferTexture2D(target, attachment, textarget, texture, level);
\r
2288 else if (pGlFramebufferTexture2DEXT)
\r
2289 pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
\r
2290 #elif defined(GL_ARB_framebuffer_object)
\r
2291 glFramebufferTexture2D(target, attachment, textarget, texture, level);
\r
2292 #elif defined(GL_EXT_framebuffer_object)
\r
2293 glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
\r
2295 os::Printer::log("glFramebufferTexture2D not supported", ELL_ERROR);
\r
2299 inline void COpenGLExtensionHandler::irrGlBindRenderbuffer(GLenum target, GLuint renderbuffer)
\r
2301 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2302 if (pGlBindRenderbuffer)
\r
2303 pGlBindRenderbuffer(target, renderbuffer);
\r
2304 else if (pGlBindRenderbufferEXT)
\r
2305 pGlBindRenderbufferEXT(target, renderbuffer);
\r
2306 #elif defined(GL_ARB_framebuffer_object)
\r
2307 glBindRenderbuffer(target, renderbuffer);
\r
2308 #elif defined(GL_EXT_framebuffer_object)
\r
2309 glBindRenderbufferEXT(target, renderbuffer);
\r
2311 os::Printer::log("glBindRenderbuffer not supported", ELL_ERROR);
\r
2315 inline void COpenGLExtensionHandler::irrGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
\r
2317 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2318 if (pGlDeleteRenderbuffers)
\r
2319 pGlDeleteRenderbuffers(n, renderbuffers);
\r
2320 else if (pGlDeleteRenderbuffersEXT)
\r
2321 pGlDeleteRenderbuffersEXT(n, renderbuffers);
\r
2322 #elif defined(GL_ARB_framebuffer_object)
\r
2323 glDeleteRenderbuffers(n, renderbuffers);
\r
2324 #elif defined(GL_EXT_framebuffer_object)
\r
2325 glDeleteRenderbuffersEXT(n, renderbuffers);
\r
2327 os::Printer::log("glDeleteRenderbuffers not supported", ELL_ERROR);
\r
2331 inline void COpenGLExtensionHandler::irrGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
\r
2333 if (renderbuffers)
\r
2334 memset(renderbuffers,0,n*sizeof(GLuint));
\r
2335 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2336 if (pGlGenRenderbuffers)
\r
2337 pGlGenRenderbuffers(n, renderbuffers);
\r
2338 else if (pGlGenRenderbuffersEXT)
\r
2339 pGlGenRenderbuffersEXT(n, renderbuffers);
\r
2340 #elif defined(GL_ARB_framebuffer_object)
\r
2341 glGenRenderbuffers(n, renderbuffers);
\r
2342 #elif defined(GL_EXT_framebuffer_object)
\r
2343 glGenRenderbuffersEXT(n, renderbuffers);
\r
2345 os::Printer::log("glGenRenderbuffers not supported", ELL_ERROR);
\r
2349 inline void COpenGLExtensionHandler::irrGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
\r
2351 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2352 if (pGlRenderbufferStorage)
\r
2353 pGlRenderbufferStorage(target, internalformat, width, height);
\r
2354 else if (pGlRenderbufferStorageEXT)
\r
2355 pGlRenderbufferStorageEXT(target, internalformat, width, height);
\r
2356 #elif defined(GL_ARB_framebuffer_object)
\r
2357 glRenderbufferStorage(target, internalformat, width, height);
\r
2358 #elif defined(GL_EXT_framebuffer_object)
\r
2359 glRenderbufferStorageEXT(target, internalformat, width, height);
\r
2361 os::Printer::log("glRenderbufferStorage not supported", ELL_ERROR);
\r
2365 inline void COpenGLExtensionHandler::irrGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
\r
2367 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2368 if (pGlFramebufferRenderbuffer)
\r
2369 pGlFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
\r
2370 else if (pGlFramebufferRenderbufferEXT)
\r
2371 pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
\r
2372 #elif defined(GL_ARB_framebuffer_object)
\r
2373 glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
\r
2374 #elif defined(GL_EXT_framebuffer_object)
\r
2375 glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
\r
2377 os::Printer::log("glFramebufferRenderbuffer not supported", ELL_ERROR);
\r
2381 inline void COpenGLExtensionHandler::irrGlGenerateMipmap(GLenum target)
\r
2383 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2384 if (pGlGenerateMipmap)
\r
2385 pGlGenerateMipmap(target);
\r
2386 else if (pGlGenerateMipmapEXT)
\r
2387 pGlGenerateMipmapEXT(target);
\r
2388 #elif defined(GL_ARB_framebuffer_object)
\r
2389 glGenerateMipmap(target);
\r
2390 #elif defined(GL_EXT_framebuffer_object)
\r
2391 glGenerateMipmapEXT(target);
\r
2393 os::Printer::log("glGenerateMipmap not supported", ELL_ERROR);
\r
2397 inline void COpenGLExtensionHandler::irrGlActiveStencilFace(GLenum face)
\r
2399 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2400 if (pGlActiveStencilFaceEXT)
\r
2401 pGlActiveStencilFaceEXT(face);
\r
2402 #elif defined(GL_EXT_stencil_two_side)
\r
2403 glActiveStencilFaceEXT(face);
\r
2405 os::Printer::log("glActiveStencilFace not supported", ELL_ERROR);
\r
2409 inline void COpenGLExtensionHandler::irrGlDrawBuffer(GLenum mode)
\r
2411 glDrawBuffer(mode);
\r
2414 inline void COpenGLExtensionHandler::irrGlDrawBuffers(GLsizei n, const GLenum *bufs)
\r
2416 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2417 if (pGlDrawBuffersARB)
\r
2418 pGlDrawBuffersARB(n, bufs);
\r
2419 else if (pGlDrawBuffersATI)
\r
2420 pGlDrawBuffersATI(n, bufs);
\r
2421 #elif defined(GL_ARB_draw_buffers)
\r
2422 glDrawBuffersARB(n, bufs);
\r
2423 #elif defined(GL_ATI_draw_buffers)
\r
2424 glDrawBuffersATI(n, bufs);
\r
2426 os::Printer::log("glDrawBuffers not supported", ELL_ERROR);
\r
2431 inline void COpenGLExtensionHandler::extGlGenBuffers(GLsizei n, GLuint *buffers)
\r
2434 memset(buffers,0,n*sizeof(GLuint));
\r
2435 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2436 if (pGlGenBuffersARB)
\r
2437 pGlGenBuffersARB(n, buffers);
\r
2438 #elif defined(GL_ARB_vertex_buffer_object)
\r
2439 glGenBuffers(n, buffers);
\r
2441 os::Printer::log("glGenBuffers not supported", ELL_ERROR);
\r
2445 inline void COpenGLExtensionHandler::extGlBindBuffer(GLenum target, GLuint buffer)
\r
2447 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2448 if (pGlBindBufferARB)
\r
2449 pGlBindBufferARB(target, buffer);
\r
2450 #elif defined(GL_ARB_vertex_buffer_object)
\r
2451 glBindBuffer(target, buffer);
\r
2453 os::Printer::log("glBindBuffer not supported", ELL_ERROR);
\r
2457 inline void COpenGLExtensionHandler::extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage)
\r
2459 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2460 if (pGlBufferDataARB)
\r
2461 pGlBufferDataARB(target, size, data, usage);
\r
2462 #elif defined(GL_ARB_vertex_buffer_object)
\r
2463 glBufferData(target, size, data, usage);
\r
2465 os::Printer::log("glBufferData not supported", ELL_ERROR);
\r
2469 inline void COpenGLExtensionHandler::extGlDeleteBuffers(GLsizei n, const GLuint *buffers)
\r
2471 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2472 if (pGlDeleteBuffersARB)
\r
2473 pGlDeleteBuffersARB(n, buffers);
\r
2474 #elif defined(GL_ARB_vertex_buffer_object)
\r
2475 glDeleteBuffers(n, buffers);
\r
2477 os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
\r
2481 inline void COpenGLExtensionHandler::extGlBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data)
\r
2483 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2484 if (pGlBufferSubDataARB)
\r
2485 pGlBufferSubDataARB(target, offset, size, data);
\r
2486 #elif defined(GL_ARB_vertex_buffer_object)
\r
2487 glBufferSubData(target, offset, size, data);
\r
2489 os::Printer::log("glBufferSubData not supported", ELL_ERROR);
\r
2493 inline void COpenGLExtensionHandler::extGlGetBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data)
\r
2495 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2496 if (pGlGetBufferSubDataARB)
\r
2497 pGlGetBufferSubDataARB(target, offset, size, data);
\r
2498 #elif defined(GL_ARB_vertex_buffer_object)
\r
2499 glGetBufferSubData(target, offset, size, data);
\r
2501 os::Printer::log("glGetBufferSubData not supported", ELL_ERROR);
\r
2505 inline void *COpenGLExtensionHandler::extGlMapBuffer(GLenum target, GLenum access)
\r
2507 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2508 if (pGlMapBufferARB)
\r
2509 return pGlMapBufferARB(target, access);
\r
2511 #elif defined(GL_ARB_vertex_buffer_object)
\r
2512 return glMapBuffer(target, access);
\r
2514 os::Printer::log("glMapBuffer not supported", ELL_ERROR);
\r
2519 inline GLboolean COpenGLExtensionHandler::extGlUnmapBuffer(GLenum target)
\r
2521 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2522 if (pGlUnmapBufferARB)
\r
2523 return pGlUnmapBufferARB(target);
\r
2525 #elif defined(GL_ARB_vertex_buffer_object)
\r
2526 return glUnmapBuffer(target);
\r
2528 os::Printer::log("glUnmapBuffer not supported", ELL_ERROR);
\r
2533 inline GLboolean COpenGLExtensionHandler::extGlIsBuffer(GLuint buffer)
\r
2535 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2536 if (pGlIsBufferARB)
\r
2537 return pGlIsBufferARB(buffer);
\r
2539 #elif defined(GL_ARB_vertex_buffer_object)
\r
2540 return glIsBuffer(buffer);
\r
2542 os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
\r
2547 inline void COpenGLExtensionHandler::extGlGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
\r
2549 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2550 if (pGlGetBufferParameterivARB)
\r
2551 pGlGetBufferParameterivARB(target, pname, params);
\r
2552 #elif defined(GL_ARB_vertex_buffer_object)
\r
2553 glGetBufferParameteriv(target, pname, params);
\r
2555 os::Printer::log("glGetBufferParameteriv not supported", ELL_ERROR);
\r
2559 inline void COpenGLExtensionHandler::extGlGetBufferPointerv(GLenum target, GLenum pname, GLvoid **params)
\r
2561 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2562 if (pGlGetBufferPointervARB)
\r
2563 pGlGetBufferPointervARB(target, pname, params);
\r
2564 #elif defined(GL_ARB_vertex_buffer_object)
\r
2565 glGetBufferPointerv(target, pname, params);
\r
2567 os::Printer::log("glGetBufferPointerv not supported", ELL_ERROR);
\r
2572 inline void COpenGLExtensionHandler::extGlProvokingVertex(GLenum mode)
\r
2574 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2575 if (FeatureAvailable[IRR_ARB_provoking_vertex] && pGlProvokingVertexARB)
\r
2576 pGlProvokingVertexARB(mode);
\r
2577 else if (FeatureAvailable[IRR_EXT_provoking_vertex] && pGlProvokingVertexEXT)
\r
2578 pGlProvokingVertexEXT(mode);
\r
2579 #elif defined(GL_ARB_provoking_vertex)
\r
2580 glProvokingVertex(mode);
\r
2581 #elif defined(GL_EXT_provoking_vertex)
\r
2582 glProvokingVertexEXT(mode);
\r
2584 os::Printer::log("glProvokingVertex not supported", ELL_ERROR);
\r
2588 inline void COpenGLExtensionHandler::extGlProgramParameteri(GLuint program, GLenum pname, GLint value)
\r
2590 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
2591 if (queryFeature(EVDF_GEOMETRY_SHADER))
\r
2593 if (pGlProgramParameteriARB)
\r
2594 pGlProgramParameteriARB(program, pname, value);
\r
2595 else if (pGlProgramParameteriEXT)
\r
2596 pGlProgramParameteriEXT(program, pname, value);
\r
2598 #elif defined(GL_ARB_geometry_shader4)
\r
2599 glProgramParameteriARB(program, pname, value);
\r
2600 #elif defined(GL_EXT_geometry_shader4)
\r
2601 glProgramParameteriEXT(program, pname, value);
\r
2602 #elif defined(GL_NV_geometry_program4) || defined(GL_NV_geometry_shader4)
\r
2603 glProgramParameteriNV(program, pname, value);
\r
2605 os::Printer::log("glProgramParameteri not supported", ELL_ERROR);
\r
2609 inline void COpenGLExtensionHandler::extGlGenQueries(GLsizei n, GLuint *ids)
\r
2611 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2612 if (pGlGenQueriesARB)
\r
2613 pGlGenQueriesARB(n, ids);
\r
2614 else if (pGlGenOcclusionQueriesNV)
\r
2615 pGlGenOcclusionQueriesNV(n, ids);
\r
2616 #elif defined(GL_ARB_occlusion_query)
\r
2617 glGenQueriesARB(n, ids);
\r
2618 #elif defined(GL_NV_occlusion_query)
\r
2619 glGenOcclusionQueriesNV(n, ids);
\r
2621 os::Printer::log("glGenQueries not supported", ELL_ERROR);
\r
2625 inline void COpenGLExtensionHandler::extGlDeleteQueries(GLsizei n, const GLuint *ids)
\r
2627 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2628 if (pGlDeleteQueriesARB)
\r
2629 pGlDeleteQueriesARB(n, ids);
\r
2630 else if (pGlDeleteOcclusionQueriesNV)
\r
2631 pGlDeleteOcclusionQueriesNV(n, ids);
\r
2632 #elif defined(GL_ARB_occlusion_query)
\r
2633 glDeleteQueriesARB(n, ids);
\r
2634 #elif defined(GL_NV_occlusion_query)
\r
2635 glDeleteOcclusionQueriesNV(n, ids);
\r
2637 os::Printer::log("glDeleteQueries not supported", ELL_ERROR);
\r
2641 inline GLboolean COpenGLExtensionHandler::extGlIsQuery(GLuint id)
\r
2643 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2644 if (pGlIsQueryARB)
\r
2645 return pGlIsQueryARB(id);
\r
2646 else if (pGlIsOcclusionQueryNV)
\r
2647 return pGlIsOcclusionQueryNV(id);
\r
2649 #elif defined(GL_ARB_occlusion_query)
\r
2650 return glIsQueryARB(id);
\r
2651 #elif defined(GL_NV_occlusion_query)
\r
2652 return glIsOcclusionQueryNV(id);
\r
2658 inline void COpenGLExtensionHandler::extGlBeginQuery(GLenum target, GLuint id)
\r
2660 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2661 if (pGlBeginQueryARB)
\r
2662 pGlBeginQueryARB(target, id);
\r
2663 else if (pGlBeginOcclusionQueryNV)
\r
2664 pGlBeginOcclusionQueryNV(id);
\r
2665 #elif defined(GL_ARB_occlusion_query)
\r
2666 glBeginQueryARB(target, id);
\r
2667 #elif defined(GL_NV_occlusion_query)
\r
2668 glBeginOcclusionQueryNV(id);
\r
2670 os::Printer::log("glBeginQuery not supported", ELL_ERROR);
\r
2674 inline void COpenGLExtensionHandler::extGlEndQuery(GLenum target)
\r
2676 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2677 if (pGlEndQueryARB)
\r
2678 pGlEndQueryARB(target);
\r
2679 else if (pGlEndOcclusionQueryNV)
\r
2680 pGlEndOcclusionQueryNV();
\r
2681 #elif defined(GL_ARB_occlusion_query)
\r
2682 glEndQueryARB(target);
\r
2683 #elif defined(GL_NV_occlusion_query)
\r
2684 glEndOcclusionQueryNV();
\r
2686 os::Printer::log("glEndQuery not supported", ELL_ERROR);
\r
2690 inline void COpenGLExtensionHandler::extGlGetQueryiv(GLenum target, GLenum pname, GLint *params)
\r
2692 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2693 if (pGlGetQueryivARB)
\r
2694 pGlGetQueryivARB(target, pname, params);
\r
2695 #elif defined(GL_ARB_occlusion_query)
\r
2696 glGetQueryivARB(target, pname, params);
\r
2698 os::Printer::log("glGetQueryivARB not supported", ELL_ERROR);
\r
2702 inline void COpenGLExtensionHandler::extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
\r
2704 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2705 if (pGlGetQueryObjectivARB)
\r
2706 pGlGetQueryObjectivARB(id, pname, params);
\r
2707 else if (pGlGetOcclusionQueryivNV)
\r
2708 pGlGetOcclusionQueryivNV(id, pname, params);
\r
2709 #elif defined(GL_ARB_occlusion_query)
\r
2710 glGetQueryObjectivARB(id, pname, params);
\r
2711 #elif defined(GL_NV_occlusion_query)
\r
2712 glGetOcclusionQueryivNV(id, pname, params);
\r
2714 os::Printer::log("glGetQueryObjectiv not supported", ELL_ERROR);
\r
2718 inline void COpenGLExtensionHandler::extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
\r
2720 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2721 if (pGlGetQueryObjectuivARB)
\r
2722 pGlGetQueryObjectuivARB(id, pname, params);
\r
2723 else if (pGlGetOcclusionQueryuivNV)
\r
2724 pGlGetOcclusionQueryuivNV(id, pname, params);
\r
2725 #elif defined(GL_ARB_occlusion_query)
\r
2726 glGetQueryObjectuivARB(id, pname, params);
\r
2727 #elif defined(GL_NV_occlusion_query)
\r
2728 glGetOcclusionQueryuivNV(id, pname, params);
\r
2730 os::Printer::log("glGetQueryObjectuiv not supported", ELL_ERROR);
\r
2734 inline void COpenGLExtensionHandler::irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
\r
2736 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2737 if (pGlBlendFuncSeparate)
\r
2738 pGlBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
\r
2739 else if (pGlBlendFuncSeparateEXT)
\r
2740 pGlBlendFuncSeparateEXT(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
\r
2741 #elif defined(GL_VERSION_1_4)
\r
2742 glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
\r
2743 #elif defined(GL_EXT_blend_func_separate)
\r
2744 glBlendFuncSeparateEXT(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
\r
2746 os::Printer::log("glBlendFuncSeparate not supported", ELL_ERROR);
\r
2750 inline void COpenGLExtensionHandler::irrGlBlendEquation(GLenum mode)
\r
2752 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2753 if (pGlBlendEquation)
\r
2754 pGlBlendEquation(mode);
\r
2755 else if (pGlBlendEquationEXT)
\r
2756 pGlBlendEquationEXT(mode);
\r
2757 #elif defined(GL_VERSION_1_4)
\r
2758 glBlendEquation(mode);
\r
2759 #elif defined(GL_EXT_blend_minmax)
\r
2760 glBlendEquationEXT(mode);
\r
2762 os::Printer::log("glBlendEquation not supported", ELL_ERROR);
\r
2766 inline void COpenGLExtensionHandler::irrGlEnableIndexed(GLenum target, GLuint index)
\r
2768 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2769 if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlEnableIndexedEXT)
\r
2770 pGlEnableIndexedEXT(target, index);
\r
2771 #elif defined(GL_EXT_draw_buffers2)
\r
2772 glEnableIndexedEXT(target, index);
\r
2774 os::Printer::log("glEnableIndexed not supported", ELL_ERROR);
\r
2778 inline void COpenGLExtensionHandler::irrGlDisableIndexed(GLenum target, GLuint index)
\r
2780 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2781 if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlDisableIndexedEXT)
\r
2782 pGlDisableIndexedEXT(target, index);
\r
2783 #elif defined(GL_EXT_draw_buffers2)
\r
2784 glDisableIndexedEXT(target, index);
\r
2786 os::Printer::log("glDisableIndexed not supported", ELL_ERROR);
\r
2790 inline void COpenGLExtensionHandler::irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
\r
2792 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2793 if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlColorMaskIndexedEXT)
\r
2794 pGlColorMaskIndexedEXT(buf, r, g, b, a);
\r
2795 #elif defined(GL_EXT_draw_buffers2)
\r
2796 glColorMaskIndexedEXT(buf, r, g, b, a);
\r
2798 os::Printer::log("glColorMaskIndexed not supported", ELL_ERROR);
\r
2802 inline void COpenGLExtensionHandler::irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
\r
2804 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2805 if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFunciARB)
\r
2806 pGlBlendFunciARB(buf, src, dst);
\r
2807 else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendFuncIndexedAMD)
\r
2808 pGlBlendFuncIndexedAMD(buf, src, dst);
\r
2809 #elif defined(GL_ARB_draw_buffers_blend)
\r
2810 glBlendFunciARB(buf, src, dst);
\r
2811 #elif defined(GL_AMD_draw_buffers_blend)
\r
2812 glBlendFuncIndexedAMD(buf, src, dst);
\r
2814 os::Printer::log("glBlendFuncIndexed not supported", ELL_ERROR);
\r
2818 inline void COpenGLExtensionHandler::irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\r
2820 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2821 if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFuncSeparateiARB)
\r
2822 pGlBlendFuncSeparateiARB(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
\r
2823 else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendFuncSeparateIndexedAMD)
\r
2824 pGlBlendFuncSeparateIndexedAMD(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
\r
2825 #elif defined(GL_ARB_draw_buffers_blend)
\r
2826 glBlendFuncSeparateiARB(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
\r
2827 #elif defined(GL_AMD_draw_buffers_blend)
\r
2828 glBlendFuncSeparateIndexedAMD(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
\r
2830 os::Printer::log("glBlendFuncSeparateIndexed not supported", ELL_ERROR);
\r
2834 inline void COpenGLExtensionHandler::irrGlBlendEquationIndexed(GLuint buf, GLenum mode)
\r
2836 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2837 if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationiARB)
\r
2838 pGlBlendEquationiARB(buf, mode);
\r
2839 else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendEquationIndexedAMD)
\r
2840 pGlBlendEquationIndexedAMD(buf, mode);
\r
2841 #elif defined(GL_ARB_draw_buffers_blend)
\r
2842 glBlendEquationiARB(buf, mode);
\r
2843 #elif defined(GL_AMD_draw_buffers_blend)
\r
2844 glBlendEquationIndexedAMD(buf, mode);
\r
2846 os::Printer::log("glBlendEquationIndexed not supported", ELL_ERROR);
\r
2850 inline void COpenGLExtensionHandler::irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
\r
2852 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2853 if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationSeparateiARB)
\r
2854 pGlBlendEquationSeparateiARB(buf, modeRGB, modeAlpha);
\r
2855 else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendEquationSeparateIndexedAMD)
\r
2856 pGlBlendEquationSeparateIndexedAMD(buf, modeRGB, modeAlpha);
\r
2857 #elif defined(GL_ARB_draw_buffers_blend)
\r
2858 glBlendEquationSeparateiARB(buf, modeRGB, modeAlpha);
\r
2859 #elif defined(GL_AMD_draw_buffers_blend)
\r
2860 glBlendEquationSeparateIndexedAMD(buf, modeRGB, modeAlpha);
\r
2862 os::Printer::log("glBlendEquationSeparateIndexed not supported", ELL_ERROR);
\r
2866 inline void COpenGLExtensionHandler::extGlTextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
\r
2868 if (Version>=405 || FeatureAvailable[IRR_ARB_direct_state_access])
\r
2870 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2871 if (pGlTextureSubImage2D)
\r
2872 pGlTextureSubImage2D(texture, level, xoffset, yoffset,width, height,format, type, pixels);
\r
2873 #elif defined(GL_VERSION_4_5)
\r
2874 glTextureSubImage2D(texture, level, xoffset, yoffset,width, height,format, type, pixels);
\r
2875 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
2877 else if (FeatureAvailable[IRR_EXT_direct_state_access])
\r
2879 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2880 if (pGlTextureSubImage2DEXT)
\r
2881 pGlTextureSubImage2DEXT(texture, target, level, xoffset, yoffset,width, height,format, type, pixels);
\r
2882 #elif defined(GL_EXT_direct_state_access)
\r
2883 glTextureSubImage2DEXT(texture, target, level, xoffset, yoffset,width, height,format, type, pixels);
\r
2884 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
2891 #ifdef GL_VERSION_3_0
\r
2892 case GL_TEXTURE_1D_ARRAY:
\r
2893 glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY, &bound);
\r
2895 #elif GL_EXT_texture_array
\r
2896 case GL_TEXTURE_1D_ARRAY_EXT:
\r
2897 glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY_EXT, &bound);
\r
2900 case GL_TEXTURE_2D:
\r
2901 glGetIntegerv(GL_TEXTURE_BINDING_2D, &bound);
\r
2903 #ifdef GL_VERSION_3_2
\r
2904 case GL_TEXTURE_2D_MULTISAMPLE:
\r
2905 glGetIntegerv(GL_TEXTURE_BINDING_2D_MULTISAMPLE, &bound);
\r
2908 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
\r
2909 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
\r
2910 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
\r
2911 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
\r
2912 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
\r
2913 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
\r
2914 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, &bound);
\r
2916 #ifdef GL_VERSION_3_1
\r
2917 case GL_TEXTURE_RECTANGLE:
\r
2918 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE, &bound);
\r
2920 #elif defined(GL_ARB_texture_rectangle)
\r
2921 case GL_TEXTURE_RECTANGLE_ARB:
\r
2922 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &bound);
\r
2928 glBindTexture(target, texture);
\r
2929 glTexSubImage2D(target, level, xoffset, yoffset,width, height,format, type, pixels);
\r
2930 glBindTexture(target, bound);
\r
2934 inline void COpenGLExtensionHandler::extGlTextureStorage2D(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
\r
2936 if (Version>=405 || FeatureAvailable[IRR_ARB_direct_state_access])
\r
2938 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2939 if (pGlTextureStorage2D)
\r
2940 pGlTextureStorage2D(texture,levels,internalformat,width,height);
\r
2941 #elif defined(GL_VERSION_4_5)
\r
2942 glTextureStorage2D(texture,levels,internalformat,width,height);
\r
2943 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
2945 else if (FeatureAvailable[IRR_EXT_direct_state_access])
\r
2947 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2948 if (pGlTextureStorage2DEXT)
\r
2949 pGlTextureStorage2DEXT(texture,target,levels,internalformat,width,height);
\r
2950 #elif defined(GL_EXT_direct_state_access)
\r
2951 glTextureStorage2DEXT(texture,target,levels,internalformat,width,height);
\r
2952 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
2955 #if defined(GL_VERSION_4_2) || defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
2957 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2958 if (pGlTexStorage2D)
\r
2959 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
2964 #ifdef GL_VERSION_3_0
\r
2965 case GL_TEXTURE_1D_ARRAY:
\r
2966 glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY, &bound);
\r
2968 #elif GL_EXT_texture_array
\r
2969 case GL_TEXTURE_1D_ARRAY_EXT:
\r
2970 glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY_EXT, &bound);
\r
2973 case GL_TEXTURE_2D:
\r
2974 glGetIntegerv(GL_TEXTURE_BINDING_2D, &bound);
\r
2976 case GL_TEXTURE_CUBE_MAP:
\r
2977 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, &bound);
\r
2979 #ifdef GL_VERSION_3_1
\r
2980 case GL_TEXTURE_RECTANGLE:
\r
2981 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE, &bound);
\r
2983 #elif defined(GL_ARB_texture_rectangle)
\r
2984 case GL_TEXTURE_RECTANGLE_ARB:
\r
2985 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &bound);
\r
2991 glBindTexture(target, texture);
\r
2992 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
2993 pGlTexStorage2D(target,levels,internalformat,width,height);
\r
2995 glTexStorage2D(target,levels,internalformat,width,height);
\r
2996 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
2997 glBindTexture(target, bound);
\r
2999 #endif // GL_VERSION_4_2 || _IRR_OPENGL_USE_EXTPOINTER_
\r
3002 inline void COpenGLExtensionHandler::extGlTextureStorage3D(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
\r
3004 if (Version>=405 || FeatureAvailable[IRR_ARB_direct_state_access])
\r
3006 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3007 if (pGlTextureStorage3D)
\r
3008 pGlTextureStorage3D(texture,levels,internalformat,width,height,depth);
\r
3009 #elif defined(GL_VERSION_4_5)
\r
3010 glTextureStorage3D(texture,levels,internalformat,width,height,depth);
\r
3011 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3013 else if (FeatureAvailable[IRR_EXT_direct_state_access])
\r
3015 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3016 if (pGlTextureStorage3DEXT)
\r
3017 pGlTextureStorage3DEXT(texture,target,levels,internalformat,width,height,depth);
\r
3018 #elif defined(GL_EXT_direct_state_access)
\r
3019 glTextureStorage3DEXT(texture,target,levels,internalformat,width,height,depth);
\r
3020 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3022 #if defined(GL_VERSION_4_2) || defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
3024 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3025 if (pGlTexStorage3D)
\r
3026 #endif // _IRR_OPENGL_USE_EX TPOINTER_
\r
3031 #ifdef GL_VERSION_3_0
\r
3032 case GL_TEXTURE_2D_ARRAY:
\r
3033 glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY, &bound);
\r
3035 #elif GL_EXT_texture_array
\r
3036 case GL_TEXTURE_2D_ARRAY_EXT:
\r
3037 glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY_EXT, &bound);
\r
3040 case GL_TEXTURE_3D:
\r
3041 glGetIntegerv(GL_TEXTURE_BINDING_3D, &bound);
\r
3043 #ifdef GL_VERSION_4_0
\r
3044 case GL_TEXTURE_CUBE_MAP_ARRAY:
\r
3045 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY, &bound);
\r
3047 #elif defined(GL_ARB_texture_cube_map_array)
\r
3048 case GL_TEXTURE_CUBE_MAP_ARRAY_ARB:
\r
3049 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB, &bound);
\r
3055 glBindTexture(target, texture);
\r
3056 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3057 pGlTexStorage3D(target,levels,internalformat,width,height,depth);
\r
3059 glTexStorage3D(target,levels,internalformat,width,height,depth);
\r
3060 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3061 glBindTexture(target, bound);
\r
3063 #endif // GL_VERSION_4_2 || _IRR_OPENGL_USE_EXTPOINTER_
\r
3066 inline void COpenGLExtensionHandler::extGlGetTextureImage(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* pixels)
\r
3068 if (Version>=405 || FeatureAvailable[IRR_ARB_direct_state_access])
\r
3070 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3071 if (pGlGetTextureImage)
\r
3072 pGlGetTextureImage(texture,level,format,type,bufSize,pixels);
\r
3073 #elif defined(GL_VERSION_4_5)
\r
3074 glGetTextureImage(texture,level,format,type,bufSize,pixels);
\r
3075 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3077 else if (FeatureAvailable[IRR_EXT_direct_state_access])
\r
3079 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3080 if (pGlGetTextureImageEXT)
\r
3081 pGlGetTextureImageEXT(texture,target,level,format,type,pixels);
\r
3082 #elif defined(GL_EXT_direct_state_access)
\r
3083 glGetTextureImageEXT(texture,target,level,format,type,pixels);
\r
3084 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3091 #ifdef GL_VERSION_3_0
\r
3092 case GL_TEXTURE_2D_ARRAY:
\r
3093 glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY, &bound);
\r
3095 #elif GL_EXT_texture_array
\r
3096 case GL_TEXTURE_2D_ARRAY_EXT:
\r
3097 glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY_EXT, &bound);
\r
3100 case GL_TEXTURE_3D:
\r
3101 glGetIntegerv(GL_TEXTURE_BINDING_3D, &bound);
\r
3103 #ifdef GL_VERSION_4_0
\r
3104 case GL_TEXTURE_CUBE_MAP_ARRAY:
\r
3105 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY, &bound);
\r
3107 #elif defined(GL_ARB_texture_cube_map_array)
\r
3108 case GL_TEXTURE_CUBE_MAP_ARRAY_ARB:
\r
3109 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB, &bound);
\r
3115 glBindTexture(target, texture);
\r
3116 glGetTexImage(target,level,format,type,pixels);
\r
3117 glBindTexture(target, bound);
\r
3121 inline void COpenGLExtensionHandler::extGlNamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level)
\r
3123 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3124 if (!needsDSAFramebufferHack)
\r
3126 if (Version>=405 || FeatureAvailable[IRR_ARB_direct_state_access])
\r
3128 pGlNamedFramebufferTexture(framebuffer, attachment, texture, level);
\r
3131 else if (FeatureAvailable[IRR_EXT_direct_state_access])
\r
3133 pGlNamedFramebufferTextureEXT(framebuffer, attachment, texture, level);
\r
3139 glGetIntegerv(GL_FRAMEBUFFER_BINDING,reinterpret_cast<GLint*>(&bound));
\r
3141 if (bound!=framebuffer)
\r
3142 pGlBindFramebuffer(GL_FRAMEBUFFER,framebuffer);
\r
3143 pGlFramebufferTexture(GL_FRAMEBUFFER,attachment,texture,level);
\r
3144 if (bound!=framebuffer)
\r
3145 pGlBindFramebuffer(GL_FRAMEBUFFER,bound);
\r
3149 inline void COpenGLExtensionHandler::extGlTextureParameteri(GLuint texture, GLenum pname, GLint param)
\r
3151 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3152 if (pGlTextureParameteri)
\r
3153 pGlTextureParameteri(texture, pname, param);
\r
3154 #endif//_IRR_OPENGL_USE_EXTPOINTER_
\r
3157 inline void COpenGLExtensionHandler::extGlTextureParameterf(GLuint texture, GLenum pname, GLfloat param)
\r
3159 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3160 if (pGlTextureParameterf)
\r
3161 pGlTextureParameterf(texture, pname, param);
\r
3162 #endif//_IRR_OPENGL_USE_EXTPOINTER_
\r
3165 inline void COpenGLExtensionHandler::extGlTextureParameteriv(GLuint texture, GLenum pname, const GLint* params)
\r
3167 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3168 if (pGlTextureParameteriv)
\r
3169 pGlTextureParameteriv(texture, pname, params);
\r
3170 #endif//_IRR_OPENGL_USE_EXTPOINTER_
\r
3173 inline void COpenGLExtensionHandler::extGlTextureParameterfv(GLuint texture, GLenum pname, const GLfloat* params)
\r
3175 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3176 if (pGlTextureParameterfv)
\r
3177 pGlTextureParameterfv(texture, pname, params);
\r
3178 #endif//_IRR_OPENGL_USE_EXTPOINTER_
\r
3181 inline void COpenGLExtensionHandler::extGlCreateTextures(GLenum target, GLsizei n, GLuint* textures)
\r
3185 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3186 if (pGlCreateTextures)
\r
3187 pGlCreateTextures(target,n,textures);
\r
3188 else if (textures)
\r
3189 memset(textures,0,n*sizeof(GLuint));
\r
3190 #elif defined(GL_VERSION_4_5)
\r
3191 glCreateTextures(target,n,textures);
\r
3192 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3196 glGenTextures(n,textures);
\r
3200 inline void COpenGLExtensionHandler::extGlCreateFramebuffers(GLsizei n, GLuint* framebuffers)
\r
3202 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3203 if (!needsDSAFramebufferHack)
\r
3207 pGlCreateFramebuffers(n, framebuffers);
\r
3212 pGlGenFramebuffers(n, framebuffers);
\r
3216 inline void COpenGLExtensionHandler::extGlBindTextures(GLuint first, GLsizei count, const GLuint *textures, const GLenum* targets)
\r
3218 const GLenum supportedTargets[] = { GL_TEXTURE_1D, GL_TEXTURE_2D // GL 1.x
\r
3219 ,GL_TEXTURE_3D // GL 2.x
\r
3220 #ifdef GL_VERSION_3_1
\r
3221 ,GL_TEXTURE_RECTANGLE
\r
3222 #elif defined(GL_ARB_texture_rectangle)
\r
3223 ,GL_TEXTURE_RECTANGLE_ARB
\r
3225 ,GL_TEXTURE_CUBE_MAP
\r
3226 #ifdef GL_VERSION_3_0
\r
3227 ,GL_TEXTURE_1D_ARRAY,GL_TEXTURE_2D_ARRAY // GL 3.x
\r
3228 #elif GL_EXT_texture_array
\r
3229 ,GL_TEXTURE_1D_ARRAY_EXT,GL_TEXTURE_2D_ARRAY_EXT
\r
3231 #ifdef GL_VERSION_3_1
\r
3232 ,GL_TEXTURE_BUFFER
\r
3233 #elif defined(GL_ARB_texture_buffer_object)
\r
3234 ,GL_TEXTURE_BUFFER_ARB
\r
3235 #elif defined(GL_EXT_texture_buffer_object)
\r
3236 ,GL_TEXTURE_BUFFER_EXT
\r
3238 #ifdef GL_VERSION_4_0
\r
3239 ,GL_TEXTURE_CUBE_MAP_ARRAY // GL 4.x
\r
3240 #elif defined(GL_ARB_texture_cube_map_array)
\r
3241 ,GL_TEXTURE_CUBE_MAP_ARRAY_ARB
\r
3243 #ifdef GL_VERSION_3_2
\r
3244 ,GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_2D_MULTISAMPLE_ARRAY
\r
3248 if (Version>=404||FeatureAvailable[IRR_ARB_multi_bind])
\r
3250 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3251 if (pGlBindTextures)
\r
3252 pGlBindTextures(first,count,textures);
\r
3253 #elif defined(GL_VERSION_4_4)
\r
3254 glBindTextures(first,count,textures);
\r
3255 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3259 GLint activeTex = 0;
\r
3260 glGetIntegerv(GL_ACTIVE_TEXTURE,&activeTex);
\r
3262 for (GLsizei i=0; i<count; i++)
\r
3264 GLuint texture = textures ? textures[i]:0;
\r
3266 GLuint unit = first+i;
\r
3267 irrGlActiveTexture(GL_TEXTURE0 + unit);
\r
3270 glBindTexture(targets[i],texture);
\r
3273 for (size_t j=0; j<sizeof(supportedTargets)/sizeof(GLenum); j++)
\r
3274 glBindTexture(supportedTargets[j],0);
\r
3278 irrGlActiveTexture(activeTex);
\r
3282 inline void COpenGLExtensionHandler::extGlGenerateTextureMipmap(GLuint texture, GLenum target)
\r
3284 if (Version>=405 || FeatureAvailable[IRR_ARB_direct_state_access])
\r
3286 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3287 if (pGlGenerateTextureMipmap)
\r
3288 pGlGenerateTextureMipmap(texture);
\r
3289 #elif defined(GL_VERSION_4_5)
\r
3290 glGenerateTextureMipmap(texture);
\r
3291 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3293 else if (FeatureAvailable[IRR_EXT_direct_state_access])
\r
3295 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3296 if (pGlGenerateTextureMipmapEXT)
\r
3297 pGlGenerateTextureMipmapEXT(texture,target);
\r
3298 #elif defined(GL_EXT_direct_state_access)
\r
3299 glGenerateTextureMipmapEXT(texture,target);
\r
3300 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3302 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3303 else if (pGlGenerateMipmap)
\r
3306 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3311 case GL_TEXTURE_1D:
\r
3312 glGetIntegerv(GL_TEXTURE_BINDING_1D, &bound);
\r
3314 #ifdef GL_VERSION_3_0
\r
3315 case GL_TEXTURE_1D_ARRAY:
\r
3316 glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY, &bound);
\r
3318 #elif GL_EXT_texture_array
\r
3319 case GL_TEXTURE_1D_ARRAY_EXT:
\r
3320 glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY_EXT, &bound);
\r
3323 case GL_TEXTURE_2D:
\r
3324 glGetIntegerv(GL_TEXTURE_BINDING_2D, &bound);
\r
3326 #ifdef GL_VERSION_3_0
\r
3327 case GL_TEXTURE_2D_ARRAY:
\r
3328 glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY, &bound);
\r
3330 #elif GL_EXT_texture_array
\r
3331 case GL_TEXTURE_2D_ARRAY_EXT:
\r
3332 glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY_EXT, &bound);
\r
3335 #ifdef GL_VERSION_3_2
\r
3336 case GL_TEXTURE_2D_MULTISAMPLE:
\r
3337 glGetIntegerv(GL_TEXTURE_BINDING_2D_MULTISAMPLE, &bound);
\r
3339 case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
\r
3340 glGetIntegerv(GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY, &bound);
\r
3343 case GL_TEXTURE_3D:
\r
3344 glGetIntegerv(GL_TEXTURE_BINDING_3D, &bound);
\r
3346 #ifdef GL_VERSION_3_1
\r
3347 case GL_TEXTURE_BUFFER:
\r
3348 glGetIntegerv(GL_TEXTURE_BINDING_BUFFER, &bound);
\r
3350 #elif defined(GL_ARB_texture_buffer_object)
\r
3351 case GL_TEXTURE_BUFFER_ARB:
\r
3352 glGetIntegerv(GL_TEXTURE_BINDING_BUFFER_ARB, &bound);
\r
3354 #elif defined(GL_EXT_texture_buffer_object)
\r
3355 case GL_TEXTURE_BUFFER_EXT:
\r
3356 glGetIntegerv(GL_TEXTURE_BINDING_BUFFER_EXT, &bound);
\r
3359 case GL_TEXTURE_CUBE_MAP:
\r
3360 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, &bound);
\r
3362 #ifdef GL_VERSION_4_0
\r
3363 case GL_TEXTURE_CUBE_MAP_ARRAY:
\r
3364 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY, &bound);
\r
3366 #elif defined(GL_ARB_texture_cube_map_array)
\r
3367 case GL_TEXTURE_CUBE_MAP_ARRAY_ARB:
\r
3368 glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB, &bound);
\r
3371 #ifdef GL_VERSION_3_1
\r
3372 case GL_TEXTURE_RECTANGLE:
\r
3373 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE, &bound);
\r
3375 #elif defined(GL_ARB_texture_rectangle)
\r
3376 case GL_TEXTURE_RECTANGLE_ARB:
\r
3377 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &bound);
\r
3381 os::Printer::log("DevSH would like to ask you what are you doing!!??\n",ELL_ERROR);
\r
3384 glBindTexture(target, texture);
\r
3385 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3386 pGlGenerateMipmap(target);
\r
3388 glGenerateMipmap(target);
\r
3389 #endif // _IRR_OPENGL_USE_EXTPOINTER_
\r
3390 glBindTexture(target, bound);
\r
3394 inline void COpenGLExtensionHandler::extGlSwapInterval(int interval)
\r
3396 // we have wglext, so try to use that
\r
3397 #if defined(_IRR_WINDOWS_API_) && defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
\r
3398 #ifdef WGL_EXT_swap_control
\r
3399 if (pWglSwapIntervalEXT)
\r
3400 pWglSwapIntervalEXT(interval);
\r
3403 #ifdef _IRR_COMPILE_WITH_X11_DEVICE_
\r
3404 #if defined(GLX_MESA_swap_control)
\r
3405 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3406 if (pGlxSwapIntervalMESA)
\r
3407 pGlxSwapIntervalMESA(interval);
\r
3409 pGlXSwapIntervalMESA(interval);
\r
3411 #elif defined(GLX_EXT_swap_control)
\r
3412 Display *dpy = glXGetCurrentDisplay();
\r
3413 GLXDrawable drawable = glXGetCurrentDrawable();
\r
3414 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3415 if (pGlxSwapIntervalEXT)
\r
3416 pGlxSwapIntervalEXT(dpy, drawable, interval);
\r
3418 pGlXSwapIntervalEXT(dpy, drawable, interval);
\r
3420 #elif defined(GLX_SGI_swap_control)
\r
3421 // does not work with interval==0
\r
3422 #ifdef _IRR_OPENGL_USE_EXTPOINTER_
\r
3423 if (interval && pGlxSwapIntervalSGI)
\r
3424 pGlxSwapIntervalSGI(interval);
\r
3427 glXSwapIntervalSGI(interval);
\r