Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenextensions.c
Go to the documentation of this file.
00001 /* 00002 * Mesa 3-D graphics library 00003 * Version: 7.3 00004 * 00005 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 00006 * 00007 * Permission is hereby granted, free of charge, to any person obtaining a 00008 * copy of this software and associated documentation files (the "Software"), 00009 * to deal in the Software without restriction, including without limitation 00010 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00011 * and/or sell copies of the Software, and to permit persons to whom the 00012 * Software is furnished to do so, subject to the following conditions: 00013 * 00014 * The above copyright notice and this permission notice shall be included 00015 * in all copies or substantial portions of the Software. 00016 * 00017 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00018 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00019 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00020 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 00021 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 00022 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00023 */ 00024 00025 00026 #include "glheader.h" 00027 #include "imports.h" 00028 #include "context.h" 00029 #include "extensions.h" 00030 #include "simple_list.h" 00031 #include "mtypes.h" 00032 00033 00034 #define F(x) (int)(uintptr_t)&(((struct gl_extensions *)0)->x) 00035 #define ON GL_TRUE 00036 #define OFF GL_FALSE 00037 00038 00039 /* 00040 * Note: The GL_MESAX_* extensions are placeholders for future ARB extensions. 00041 */ 00042 static const struct { 00043 GLboolean enabled; 00044 const char *name; 00045 int flag_offset; 00046 } default_extensions[] = { 00047 { OFF, "GL_ARB_depth_texture", F(ARB_depth_texture) }, 00048 { OFF, "GL_ARB_draw_buffers", F(ARB_draw_buffers) }, 00049 { OFF, "GL_ARB_fragment_program", F(ARB_fragment_program) }, 00050 { OFF, "GL_ARB_fragment_program_shadow", F(ARB_fragment_program_shadow) }, 00051 { OFF, "GL_ARB_fragment_shader", F(ARB_fragment_shader) }, 00052 { OFF, "GL_ARB_half_float_pixel", F(ARB_half_float_pixel) }, 00053 { OFF, "GL_ARB_imaging", F(ARB_imaging) }, 00054 { OFF, "GL_ARB_multisample", F(ARB_multisample) }, 00055 { OFF, "GL_ARB_multitexture", F(ARB_multitexture) }, 00056 { OFF, "GL_ARB_occlusion_query", F(ARB_occlusion_query) }, 00057 { OFF, "GL_ARB_pixel_buffer_object", F(EXT_pixel_buffer_object) }, 00058 { OFF, "GL_ARB_point_parameters", F(EXT_point_parameters) }, 00059 { OFF, "GL_ARB_point_sprite", F(ARB_point_sprite) }, 00060 { OFF, "GL_ARB_shader_objects", F(ARB_shader_objects) }, 00061 { OFF, "GL_ARB_shading_language_100", F(ARB_shading_language_100) }, 00062 { OFF, "GL_ARB_shading_language_120", F(ARB_shading_language_120) }, 00063 { OFF, "GL_ARB_shadow", F(ARB_shadow) }, 00064 { OFF, "GL_ARB_shadow_ambient", F(SGIX_shadow_ambient) }, 00065 { OFF, "GL_ARB_texture_border_clamp", F(ARB_texture_border_clamp) }, 00066 { OFF, "GL_ARB_texture_compression", F(ARB_texture_compression) }, 00067 { OFF, "GL_ARB_texture_cube_map", F(ARB_texture_cube_map) }, 00068 { OFF, "GL_ARB_texture_env_add", F(EXT_texture_env_add) }, 00069 { OFF, "GL_ARB_texture_env_combine", F(ARB_texture_env_combine) }, 00070 { OFF, "GL_ARB_texture_env_crossbar", F(ARB_texture_env_crossbar) }, 00071 { OFF, "GL_ARB_texture_env_dot3", F(ARB_texture_env_dot3) }, 00072 { OFF, "GL_MESAX_texture_float", F(ARB_texture_float) }, 00073 { OFF, "GL_ARB_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)}, 00074 { OFF, "GL_ARB_texture_non_power_of_two", F(ARB_texture_non_power_of_two)}, 00075 { OFF, "GL_ARB_texture_rectangle", F(NV_texture_rectangle) }, 00076 { ON, "GL_ARB_transpose_matrix", F(ARB_transpose_matrix) }, 00077 { OFF, "GL_ARB_vertex_buffer_object", F(ARB_vertex_buffer_object) }, 00078 { OFF, "GL_ARB_vertex_program", F(ARB_vertex_program) }, 00079 { OFF, "GL_ARB_vertex_shader", F(ARB_vertex_shader) }, 00080 { ON, "GL_ARB_window_pos", F(ARB_window_pos) }, 00081 { ON, "GL_EXT_abgr", F(EXT_abgr) }, 00082 { ON, "GL_EXT_bgra", F(EXT_bgra) }, 00083 { OFF, "GL_EXT_blend_color", F(EXT_blend_color) }, 00084 { OFF, "GL_EXT_blend_equation_separate", F(EXT_blend_equation_separate) }, 00085 { OFF, "GL_EXT_blend_func_separate", F(EXT_blend_func_separate) }, 00086 { OFF, "GL_EXT_blend_logic_op", F(EXT_blend_logic_op) }, 00087 { OFF, "GL_EXT_blend_minmax", F(EXT_blend_minmax) }, 00088 { OFF, "GL_EXT_blend_subtract", F(EXT_blend_subtract) }, 00089 { ON, "GL_EXT_clip_volume_hint", F(EXT_clip_volume_hint) }, 00090 { OFF, "GL_EXT_cull_vertex", F(EXT_cull_vertex) }, 00091 { ON, "GL_EXT_compiled_vertex_array", F(EXT_compiled_vertex_array) }, 00092 { OFF, "GL_EXT_convolution", F(EXT_convolution) }, 00093 { ON, "GL_EXT_copy_texture", F(EXT_copy_texture) }, 00094 { OFF, "GL_EXT_depth_bounds_test", F(EXT_depth_bounds_test) }, 00095 { ON, "GL_EXT_draw_range_elements", F(EXT_draw_range_elements) }, 00096 { OFF, "GL_EXT_framebuffer_object", F(EXT_framebuffer_object) }, 00097 { OFF, "GL_EXT_framebuffer_blit", F(EXT_framebuffer_blit) }, 00098 { OFF, "GL_EXT_fog_coord", F(EXT_fog_coord) }, 00099 { OFF, "GL_EXT_gpu_program_parameters", F(EXT_gpu_program_parameters) }, 00100 { OFF, "GL_EXT_histogram", F(EXT_histogram) }, 00101 { OFF, "GL_EXT_multi_draw_arrays", F(EXT_multi_draw_arrays) }, 00102 { OFF, "GL_EXT_packed_depth_stencil", F(EXT_packed_depth_stencil) }, 00103 { ON, "GL_EXT_packed_pixels", F(EXT_packed_pixels) }, 00104 { OFF, "GL_EXT_paletted_texture", F(EXT_paletted_texture) }, 00105 { OFF, "GL_EXT_pixel_buffer_object", F(EXT_pixel_buffer_object) }, 00106 { OFF, "GL_EXT_point_parameters", F(EXT_point_parameters) }, 00107 { ON, "GL_EXT_polygon_offset", F(EXT_polygon_offset) }, 00108 { ON, "GL_EXT_rescale_normal", F(EXT_rescale_normal) }, 00109 { OFF, "GL_EXT_secondary_color", F(EXT_secondary_color) }, 00110 { ON, "GL_EXT_separate_specular_color", F(EXT_separate_specular_color) }, 00111 { OFF, "GL_EXT_shadow_funcs", F(EXT_shadow_funcs) }, 00112 { OFF, "GL_EXT_shared_texture_palette", F(EXT_shared_texture_palette) }, 00113 { OFF, "GL_EXT_stencil_two_side", F(EXT_stencil_two_side) }, 00114 { OFF, "GL_EXT_stencil_wrap", F(EXT_stencil_wrap) }, 00115 { ON, "GL_EXT_subtexture", F(EXT_subtexture) }, 00116 { ON, "GL_EXT_texture", F(EXT_texture) }, 00117 { ON, "GL_EXT_texture3D", F(EXT_texture3D) }, 00118 { OFF, "GL_EXT_texture_compression_s3tc", F(EXT_texture_compression_s3tc) }, 00119 { ON, "GL_EXT_texture_edge_clamp", F(SGIS_texture_edge_clamp) }, 00120 { OFF, "GL_EXT_texture_env_add", F(EXT_texture_env_add) }, 00121 { OFF, "GL_EXT_texture_env_combine", F(EXT_texture_env_combine) }, 00122 { OFF, "GL_EXT_texture_env_dot3", F(EXT_texture_env_dot3) }, 00123 { OFF, "GL_EXT_texture_filter_anisotropic", F(EXT_texture_filter_anisotropic) }, 00124 { OFF, "GL_EXT_texture_lod_bias", F(EXT_texture_lod_bias) }, 00125 { OFF, "GL_EXT_texture_mirror_clamp", F(EXT_texture_mirror_clamp) }, 00126 { ON, "GL_EXT_texture_object", F(EXT_texture_object) }, 00127 { OFF, "GL_EXT_texture_rectangle", F(NV_texture_rectangle) }, 00128 { OFF, "GL_EXT_texture_sRGB", F(EXT_texture_sRGB) }, 00129 { OFF, "GL_EXT_timer_query", F(EXT_timer_query) }, 00130 { ON, "GL_EXT_vertex_array", F(EXT_vertex_array) }, 00131 { OFF, "GL_EXT_vertex_array_set", F(EXT_vertex_array_set) }, 00132 { OFF, "GL_3DFX_texture_compression_FXT1", F(TDFX_texture_compression_FXT1) }, 00133 { OFF, "GL_APPLE_client_storage", F(APPLE_client_storage) }, 00134 { ON, "GL_APPLE_packed_pixels", F(APPLE_packed_pixels) }, 00135 { OFF, "GL_APPLE_vertex_array_object", F(APPLE_vertex_array_object) }, 00136 { OFF, "GL_ATI_blend_equation_separate", F(EXT_blend_equation_separate) }, 00137 { OFF, "GL_ATI_texture_env_combine3", F(ATI_texture_env_combine3)}, 00138 { OFF, "GL_ATI_texture_mirror_once", F(ATI_texture_mirror_once)}, 00139 { OFF, "GL_ATI_fragment_shader", F(ATI_fragment_shader)}, 00140 { OFF, "GL_ATI_separate_stencil", F(ATI_separate_stencil)}, 00141 { OFF, "GL_IBM_multimode_draw_arrays", F(IBM_multimode_draw_arrays) }, 00142 { ON, "GL_IBM_rasterpos_clip", F(IBM_rasterpos_clip) }, 00143 { OFF, "GL_IBM_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)}, 00144 { OFF, "GL_INGR_blend_func_separate", F(EXT_blend_func_separate) }, 00145 { OFF, "GL_MESA_pack_invert", F(MESA_pack_invert) }, 00146 { OFF, "GL_MESA_packed_depth_stencil", F(MESA_packed_depth_stencil) }, 00147 { OFF, "GL_MESA_program_debug", F(MESA_program_debug) }, 00148 { OFF, "GL_MESA_resize_buffers", F(MESA_resize_buffers) }, 00149 { OFF, "GL_MESA_texture_array", F(MESA_texture_array) }, 00150 { OFF, "GL_MESA_ycbcr_texture", F(MESA_ycbcr_texture) }, 00151 { ON, "GL_MESA_window_pos", F(ARB_window_pos) }, 00152 { OFF, "GL_NV_blend_square", F(NV_blend_square) }, 00153 { OFF, "GL_NV_fragment_program", F(NV_fragment_program) }, 00154 { ON, "GL_NV_light_max_exponent", F(NV_light_max_exponent) }, 00155 { OFF, "GL_NV_point_sprite", F(NV_point_sprite) }, 00156 { OFF, "GL_NV_texture_rectangle", F(NV_texture_rectangle) }, 00157 { ON, "GL_NV_texgen_reflection", F(NV_texgen_reflection) }, 00158 { OFF, "GL_NV_vertex_program", F(NV_vertex_program) }, 00159 { OFF, "GL_NV_vertex_program1_1", F(NV_vertex_program1_1) }, 00160 { ON, "GL_OES_read_format", F(OES_read_format) }, 00161 { OFF, "GL_SGI_color_matrix", F(SGI_color_matrix) }, 00162 { OFF, "GL_SGI_color_table", F(SGI_color_table) }, 00163 { OFF, "GL_SGI_texture_color_table", F(SGI_texture_color_table) }, 00164 { OFF, "GL_SGIS_generate_mipmap", F(SGIS_generate_mipmap) }, 00165 { OFF, "GL_SGIS_texture_border_clamp", F(ARB_texture_border_clamp) }, 00166 { ON, "GL_SGIS_texture_edge_clamp", F(SGIS_texture_edge_clamp) }, 00167 { ON, "GL_SGIS_texture_lod", F(SGIS_texture_lod) }, 00168 { OFF, "GL_SGIX_depth_texture", F(ARB_depth_texture) }, 00169 { OFF, "GL_SGIX_shadow", F(SGIX_shadow) }, 00170 { OFF, "GL_SGIX_shadow_ambient", F(SGIX_shadow_ambient) }, 00171 { OFF, "GL_SUN_multi_draw_arrays", F(EXT_multi_draw_arrays) }, 00172 { OFF, "GL_S3_s3tc", F(S3_s3tc) }, 00173 }; 00174 00175 00176 00181 void 00182 _mesa_enable_sw_extensions(GLcontext *ctx) 00183 { 00184 ctx->Extensions.ARB_depth_texture = GL_TRUE; 00185 ctx->Extensions.ARB_draw_buffers = GL_TRUE; 00186 #if FEATURE_ARB_fragment_program 00187 ctx->Extensions.ARB_fragment_program = GL_TRUE; 00188 ctx->Extensions.ARB_fragment_program_shadow = GL_TRUE; 00189 #endif 00190 #if FEATURE_ARB_fragment_shader 00191 ctx->Extensions.ARB_fragment_shader = GL_TRUE; 00192 #endif 00193 ctx->Extensions.ARB_half_float_pixel = GL_TRUE; 00194 ctx->Extensions.ARB_imaging = GL_TRUE; 00195 ctx->Extensions.ARB_multitexture = GL_TRUE; 00196 #if FEATURE_ARB_occlusion_query 00197 ctx->Extensions.ARB_occlusion_query = GL_TRUE; 00198 #endif 00199 ctx->Extensions.ARB_point_sprite = GL_TRUE; 00200 #if FEATURE_ARB_shader_objects 00201 ctx->Extensions.ARB_shader_objects = GL_TRUE; 00202 #endif 00203 #if FEATURE_ARB_shading_language_100 00204 ctx->Extensions.ARB_shading_language_100 = GL_TRUE; 00205 #endif 00206 #if FEATURE_ARB_shading_language_120 00207 ctx->Extensions.ARB_shading_language_120 = GL_TRUE; 00208 #endif 00209 ctx->Extensions.ARB_shadow = GL_TRUE; 00210 ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; 00211 ctx->Extensions.ARB_texture_cube_map = GL_TRUE; 00212 ctx->Extensions.ARB_texture_env_combine = GL_TRUE; 00213 ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE; 00214 ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE; 00215 /*ctx->Extensions.ARB_texture_float = GL_TRUE;*/ 00216 ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE; 00217 ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE; 00218 #if FEATURE_ARB_vertex_program 00219 ctx->Extensions.ARB_vertex_program = GL_TRUE; 00220 #endif 00221 #if FEATURE_ARB_vertex_shader 00222 ctx->Extensions.ARB_vertex_shader = GL_TRUE; 00223 #endif 00224 #if FEATURE_ARB_vertex_buffer_object 00225 ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE; 00226 #endif 00227 ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; 00228 #if FEATURE_ATI_fragment_shader 00229 ctx->Extensions.ATI_fragment_shader = GL_TRUE; 00230 #endif 00231 ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE; 00232 ctx->Extensions.ATI_texture_mirror_once = GL_TRUE; 00233 ctx->Extensions.ATI_separate_stencil = GL_TRUE; 00234 ctx->Extensions.EXT_blend_color = GL_TRUE; 00235 ctx->Extensions.EXT_blend_equation_separate = GL_TRUE; 00236 ctx->Extensions.EXT_blend_func_separate = GL_TRUE; 00237 ctx->Extensions.EXT_blend_logic_op = GL_TRUE; 00238 ctx->Extensions.EXT_blend_minmax = GL_TRUE; 00239 ctx->Extensions.EXT_blend_subtract = GL_TRUE; 00240 ctx->Extensions.EXT_convolution = GL_TRUE; 00241 ctx->Extensions.EXT_depth_bounds_test = GL_TRUE; 00242 ctx->Extensions.EXT_fog_coord = GL_TRUE; 00243 #if FEATURE_EXT_framebuffer_object 00244 ctx->Extensions.EXT_framebuffer_object = GL_TRUE; 00245 #endif 00246 #if FEATURE_EXT_framebuffer_blit 00247 ctx->Extensions.EXT_framebuffer_blit = GL_TRUE; 00248 #endif 00249 ctx->Extensions.EXT_histogram = GL_TRUE; 00250 ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE; 00251 ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE; 00252 ctx->Extensions.EXT_paletted_texture = GL_TRUE; 00253 #if FEATURE_EXT_pixel_buffer_object 00254 ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; 00255 #endif 00256 ctx->Extensions.EXT_point_parameters = GL_TRUE; 00257 ctx->Extensions.EXT_shadow_funcs = GL_TRUE; 00258 ctx->Extensions.EXT_secondary_color = GL_TRUE; 00259 ctx->Extensions.EXT_shared_texture_palette = GL_TRUE; 00260 ctx->Extensions.EXT_stencil_wrap = GL_TRUE; 00261 ctx->Extensions.EXT_stencil_two_side = GL_TRUE; 00262 ctx->Extensions.EXT_texture_env_add = GL_TRUE; 00263 ctx->Extensions.EXT_texture_env_combine = GL_TRUE; 00264 ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE; 00265 ctx->Extensions.EXT_texture_mirror_clamp = GL_TRUE; 00266 ctx->Extensions.EXT_texture_lod_bias = GL_TRUE; 00267 #if FEATURE_EXT_texture_sRGB 00268 ctx->Extensions.EXT_texture_sRGB = GL_TRUE; 00269 #endif 00270 ctx->Extensions.IBM_multimode_draw_arrays = GL_TRUE; 00271 ctx->Extensions.MESA_pack_invert = GL_TRUE; 00272 #if FEATURE_MESA_program_debug 00273 ctx->Extensions.MESA_program_debug = GL_TRUE; 00274 #endif 00275 ctx->Extensions.MESA_resize_buffers = GL_TRUE; 00276 ctx->Extensions.MESA_texture_array = GL_TRUE; 00277 ctx->Extensions.MESA_ycbcr_texture = GL_TRUE; 00278 ctx->Extensions.NV_blend_square = GL_TRUE; 00279 /*ctx->Extensions.NV_light_max_exponent = GL_TRUE;*/ 00280 ctx->Extensions.NV_point_sprite = GL_TRUE; 00281 ctx->Extensions.NV_texture_rectangle = GL_TRUE; 00282 /*ctx->Extensions.NV_texgen_reflection = GL_TRUE;*/ 00283 #if FEATURE_NV_vertex_program 00284 ctx->Extensions.NV_vertex_program = GL_TRUE; 00285 ctx->Extensions.NV_vertex_program1_1 = GL_TRUE; 00286 #endif 00287 #if FEATURE_NV_fragment_program 00288 ctx->Extensions.NV_fragment_program = GL_TRUE; 00289 #endif 00290 ctx->Extensions.SGI_color_matrix = GL_TRUE; 00291 ctx->Extensions.SGI_color_table = GL_TRUE; 00292 ctx->Extensions.SGI_texture_color_table = GL_TRUE; 00293 ctx->Extensions.SGIS_generate_mipmap = GL_TRUE; 00294 ctx->Extensions.SGIS_texture_edge_clamp = GL_TRUE; 00295 ctx->Extensions.SGIX_shadow = GL_TRUE; 00296 ctx->Extensions.SGIX_shadow_ambient = GL_TRUE; 00297 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program 00298 ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE; 00299 #endif 00300 #if FEATURE_texture_fxt1 00301 _mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1"); 00302 #endif 00303 #if FEATURE_texture_s3tc 00304 if (ctx->Mesa_DXTn) { 00305 _mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc"); 00306 _mesa_enable_extension(ctx, "GL_S3_s3tc"); 00307 } 00308 #endif 00309 } 00310 00311 00315 void 00316 _mesa_enable_imaging_extensions(GLcontext *ctx) 00317 { 00318 ctx->Extensions.ARB_imaging = GL_TRUE; 00319 ctx->Extensions.EXT_blend_color = GL_TRUE; 00320 ctx->Extensions.EXT_blend_logic_op = GL_TRUE; 00321 ctx->Extensions.EXT_blend_minmax = GL_TRUE; 00322 ctx->Extensions.EXT_blend_subtract = GL_TRUE; 00323 ctx->Extensions.EXT_convolution = GL_TRUE; 00324 ctx->Extensions.EXT_histogram = GL_TRUE; 00325 ctx->Extensions.SGI_color_matrix = GL_TRUE; 00326 ctx->Extensions.SGI_color_table = GL_TRUE; 00327 } 00328 00329 00330 00335 void 00336 _mesa_enable_1_3_extensions(GLcontext *ctx) 00337 { 00338 ctx->Extensions.ARB_multisample = GL_TRUE; 00339 ctx->Extensions.ARB_multitexture = GL_TRUE; 00340 ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; 00341 ctx->Extensions.ARB_texture_compression = GL_TRUE; 00342 ctx->Extensions.ARB_texture_cube_map = GL_TRUE; 00343 ctx->Extensions.ARB_texture_env_combine = GL_TRUE; 00344 ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE; 00345 ctx->Extensions.EXT_texture_env_add = GL_TRUE; 00346 /*ctx->Extensions.ARB_transpose_matrix = GL_TRUE;*/ 00347 } 00348 00349 00350 00355 void 00356 _mesa_enable_1_4_extensions(GLcontext *ctx) 00357 { 00358 ctx->Extensions.ARB_depth_texture = GL_TRUE; 00359 ctx->Extensions.ARB_shadow = GL_TRUE; 00360 ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE; 00361 ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE; 00362 ctx->Extensions.ARB_window_pos = GL_TRUE; 00363 ctx->Extensions.EXT_blend_color = GL_TRUE; 00364 ctx->Extensions.EXT_blend_func_separate = GL_TRUE; 00365 ctx->Extensions.EXT_blend_minmax = GL_TRUE; 00366 ctx->Extensions.EXT_blend_subtract = GL_TRUE; 00367 ctx->Extensions.EXT_fog_coord = GL_TRUE; 00368 ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE; 00369 ctx->Extensions.EXT_point_parameters = GL_TRUE; 00370 ctx->Extensions.EXT_secondary_color = GL_TRUE; 00371 ctx->Extensions.EXT_stencil_wrap = GL_TRUE; 00372 ctx->Extensions.EXT_texture_lod_bias = GL_TRUE; 00373 ctx->Extensions.SGIS_generate_mipmap = GL_TRUE; 00374 } 00375 00376 00381 void 00382 _mesa_enable_1_5_extensions(GLcontext *ctx) 00383 { 00384 ctx->Extensions.ARB_occlusion_query = GL_TRUE; 00385 ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE; 00386 ctx->Extensions.EXT_shadow_funcs = GL_TRUE; 00387 } 00388 00389 00394 void 00395 _mesa_enable_2_0_extensions(GLcontext *ctx) 00396 { 00397 ctx->Extensions.ARB_draw_buffers = GL_TRUE; 00398 #if FEATURE_ARB_fragment_shader 00399 ctx->Extensions.ARB_fragment_shader = GL_TRUE; 00400 #endif 00401 ctx->Extensions.ARB_point_sprite = GL_TRUE; 00402 ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE; 00403 #if FEATURE_ARB_shader_objects 00404 ctx->Extensions.ARB_shader_objects = GL_TRUE; 00405 #endif 00406 #if FEATURE_ARB_shading_language_100 00407 ctx->Extensions.ARB_shading_language_100 = GL_TRUE; 00408 #endif 00409 ctx->Extensions.EXT_stencil_two_side = GL_TRUE; 00410 #if FEATURE_ARB_vertex_shader 00411 ctx->Extensions.ARB_vertex_shader = GL_TRUE; 00412 #endif 00413 } 00414 00415 00420 void 00421 _mesa_enable_2_1_extensions(GLcontext *ctx) 00422 { 00423 #if FEATURE_EXT_pixel_buffer_object 00424 ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; 00425 #endif 00426 #if FEATURE_EXT_texture_sRGB 00427 ctx->Extensions.EXT_texture_sRGB = GL_TRUE; 00428 #endif 00429 #ifdef FEATURE_ARB_shading_language_120 00430 ctx->Extensions.ARB_shading_language_120 = GL_TRUE; 00431 #endif 00432 } 00433 00434 00435 00439 static void 00440 set_extension( GLcontext *ctx, const char *name, GLboolean state ) 00441 { 00442 GLboolean *base = (GLboolean *) &ctx->Extensions; 00443 GLuint i; 00444 00445 if (ctx->Extensions.String) { 00446 /* The string was already queried - can't change it now! */ 00447 _mesa_problem(ctx, "Trying to enable/disable extension after glGetString(GL_EXTENSIONS): %s", name); 00448 return; 00449 } 00450 00451 for (i = 0 ; i < Elements(default_extensions) ; i++) { 00452 if (_mesa_strcmp(default_extensions[i].name, name) == 0) { 00453 if (default_extensions[i].flag_offset) { 00454 GLboolean *enabled = base + default_extensions[i].flag_offset; 00455 *enabled = state; 00456 } 00457 return; 00458 } 00459 } 00460 _mesa_problem(ctx, "Trying to enable unknown extension: %s", name); 00461 } 00462 00463 00468 void 00469 _mesa_enable_extension( GLcontext *ctx, const char *name ) 00470 { 00471 set_extension(ctx, name, GL_TRUE); 00472 } 00473 00474 00479 void 00480 _mesa_disable_extension( GLcontext *ctx, const char *name ) 00481 { 00482 set_extension(ctx, name, GL_FALSE); 00483 } 00484 00485 00489 GLboolean 00490 _mesa_extension_is_enabled( GLcontext *ctx, const char *name ) 00491 { 00492 const GLboolean *base = (const GLboolean *) &ctx->Extensions; 00493 GLuint i; 00494 00495 for (i = 0 ; i < Elements(default_extensions) ; i++) { 00496 if (_mesa_strcmp(default_extensions[i].name, name) == 0) { 00497 if (!default_extensions[i].flag_offset) 00498 return GL_TRUE; 00499 return *(base + default_extensions[i].flag_offset); 00500 } 00501 } 00502 return GL_FALSE; 00503 } 00504 00505 00511 void 00512 _mesa_init_extensions( GLcontext *ctx ) 00513 { 00514 GLboolean *base = (GLboolean *) &ctx->Extensions; 00515 GLuint i; 00516 00517 for (i = 0 ; i < Elements(default_extensions) ; i++) { 00518 if (default_extensions[i].enabled && 00519 default_extensions[i].flag_offset) { 00520 *(base + default_extensions[i].flag_offset) = GL_TRUE; 00521 } 00522 } 00523 } 00524 00525 00530 GLubyte * 00531 _mesa_make_extension_string( GLcontext *ctx ) 00532 { 00533 const GLboolean *base = (const GLboolean *) &ctx->Extensions; 00534 GLuint extStrLen = 0; 00535 GLubyte *s; 00536 GLuint i; 00537 00538 /* first, compute length of the extension string */ 00539 for (i = 0 ; i < Elements(default_extensions) ; i++) { 00540 if (!default_extensions[i].flag_offset || 00541 *(base + default_extensions[i].flag_offset)) { 00542 extStrLen += (GLuint)_mesa_strlen(default_extensions[i].name) + 1; 00543 } 00544 } 00545 s = (GLubyte *) _mesa_malloc(extStrLen); 00546 00547 /* second, build the extension string */ 00548 extStrLen = 0; 00549 for (i = 0 ; i < Elements(default_extensions) ; i++) { 00550 if (!default_extensions[i].flag_offset || 00551 *(base + default_extensions[i].flag_offset)) { 00552 GLuint len = (GLuint)_mesa_strlen(default_extensions[i].name); 00553 _mesa_memcpy(s + extStrLen, default_extensions[i].name, len); 00554 extStrLen += len; 00555 s[extStrLen] = (GLubyte) ' '; 00556 extStrLen++; 00557 } 00558 } 00559 ASSERT(extStrLen > 0); 00560 00561 s[extStrLen - 1] = 0; 00562 00563 return s; 00564 } Generated on Sun May 27 2012 04:19:36 for ReactOS by
1.7.6.1
|