ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

extensions.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.