fixed pointer arithmetic error in glCopyPixels
[mesa.git] / src / mesa / main / extensions.c
index 39cf34cd4ec6ae265e28d80904e93bb551aea438..9f0542395c8d1bdb13a95855f498a27066979b60 100644 (file)
@@ -1,10 +1,10 @@
-/* $Id: extensions.c,v 1.50 2001/02/27 00:05:27 brianp Exp $ */
+/* $Id: extensions.c,v 1.70 2002/03/13 04:33:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.5
+ * Version:  4.1
  *
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -56,59 +56,75 @@ static struct {
    const char *name;
    int flag_offset;
 } default_extensions[] = {
-   { OFF, "GL_ARB_imaging",                   F(ARB_imaging) },
-   { OFF, "GL_ARB_multitexture",              F(ARB_multitexture) },
-   { OFF, "GL_ARB_texture_compression",       F(ARB_texture_compression) },
-   { OFF, "GL_ARB_texture_cube_map",          F(ARB_texture_cube_map) },
-   { OFF, "GL_ARB_texture_env_add",           F(ARB_texture_env_add) },
-   { ON,  "GL_ARB_tranpose_matrix",           0 },
-   { ON,  "GL_EXT_abgr",                      0 },
-   { ON,  "GL_EXT_bgra",                      0 },
-   { OFF, "GL_EXT_blend_color",               F(EXT_blend_color) },
-   { OFF, "GL_EXT_blend_func_separate",       F(EXT_blend_func_separate) },
-   { OFF, "GL_EXT_blend_logic_op",            F(EXT_blend_logic_op) },
-   { OFF, "GL_EXT_blend_minmax",              F(EXT_blend_minmax) },
-   { OFF, "GL_EXT_blend_subtract",            F(EXT_blend_subtract) },
-   { ON,  "GL_EXT_clip_volume_hint",          F(EXT_clip_volume_hint) },
-   { OFF, "GL_EXT_cull_vertex",               0 },
-   { OFF, "GL_EXT_convolution",               F(EXT_convolution) },
-   { ON,  "GL_EXT_compiled_vertex_array",     F(EXT_compiled_vertex_array) },
-   { OFF, "GL_EXT_fog_coord",                 F(EXT_fog_coord) },
-   { OFF, "GL_EXT_histogram",                 F(EXT_histogram) },
-   { ON,  "GL_EXT_packed_pixels",             F(EXT_packed_pixels) },
-   { OFF, "GL_EXT_paletted_texture",          F(EXT_paletted_texture) },
-   { OFF, "GL_EXT_point_parameters",          F(EXT_point_parameters) },
-   { ON,  "GL_EXT_polygon_offset",            F(EXT_polygon_offset) },
-   { ON,  "GL_EXT_rescale_normal",            F(EXT_rescale_normal) },
-   { OFF, "GL_EXT_secondary_color",           F(EXT_secondary_color) },
-   { OFF, "GL_EXT_shared_texture_palette",    F(EXT_shared_texture_palette) },
-   { OFF, "GL_EXT_stencil_wrap",              F(EXT_stencil_wrap) },
-   { ON,  "GL_EXT_texture3D",                 F(EXT_texture3D) },
-   { OFF, "GL_EXT_texture_compression_s3tc",  F(EXT_texture_compression_s3tc)},
-   { OFF, "GL_EXT_texture_env_add",           F(EXT_texture_env_add) },
-   { OFF, "GL_EXT_texture_env_combine",       F(EXT_texture_env_combine) },
-   { OFF, "GL_EXT_texture_env_dot3",          F(EXT_texture_env_dot3) },
-   { ON,  "GL_EXT_texture_object",            F(EXT_texture_object) },
-   { OFF, "GL_EXT_texture_lod_bias",          F(EXT_texture_lod_bias) },
-   { ON,  "GL_EXT_vertex_array",              0 },
-   { OFF, "GL_EXT_vertex_array_set",          F(EXT_vertex_array_set) },
-   { OFF, "GL_HP_occlusion_test",             F(HP_occlusion_test) },
-   { OFF, "GL_INGR_blend_func_separate",      F(INGR_blend_func_separate) },
-   { OFF, "GL_MESA_packed_depth_stencil",     0 },
-   { OFF, "GL_MESA_resize_buffers",           F(MESA_resize_buffers) },
-   { OFF, "GL_MESA_sprite_point",             F(MESA_sprite_point) },
-   { ON,  "GL_MESA_window_pos",               F(MESA_window_pos) },
-   { OFF, "GL_NV_blend_square",               F(NV_blend_square) },
-   { ON,  "GL_NV_texgen_reflection",          F(NV_texgen_reflection) },
-   { OFF, "GL_SGI_color_matrix",              F(SGI_color_matrix) },
-   { OFF, "GL_SGI_color_table",               F(SGI_color_table) },
-   { OFF, "GL_SGIS_pixel_texture",            F(SGIS_pixel_texture) },
-   { OFF, "GL_SGIS_texture_edge_clamp",       F(SGIS_texture_edge_clamp) },
-   { OFF, "GL_SGIX_depth_texture",            F(SGIX_depth_texture) },
-   { OFF, "GL_SGIX_pixel_texture",            F(SGIX_pixel_texture) },
-   { OFF, "GL_SGIX_shadow",                   F(SGIX_shadow) },
-   { OFF, "GL_SGIX_shadow_ambient",           F(SGIX_shadow_ambient) },
-   { OFF, "GL_3DFX_texture_compression_FXT1", F(_3DFX_texture_compression_FXT1) }
+   { OFF, "GL_ARB_depth_texture",              F(ARB_depth_texture) },
+   { OFF, "GL_ARB_imaging",                    F(ARB_imaging) },
+   { OFF, "GL_ARB_multisample",                F(ARB_multisample) },
+   { OFF, "GL_ARB_multitexture",               F(ARB_multitexture) },
+   { OFF, "GL_ARB_shadow",                     F(ARB_shadow) },
+   { OFF, "GL_ARB_shadow_ambient",             F(SGIX_shadow_ambient) },
+   { OFF, "GL_ARB_texture_border_clamp",       F(ARB_texture_border_clamp) },
+   { OFF, "GL_ARB_texture_compression",        F(ARB_texture_compression) },
+   { OFF, "GL_ARB_texture_cube_map",           F(ARB_texture_cube_map) },
+   { OFF, "GL_ARB_texture_env_add",            F(EXT_texture_env_add) },
+   { OFF, "GL_ARB_texture_env_combine",        F(ARB_texture_env_combine) },
+   { OFF, "GL_ARB_texture_env_dot3",           F(ARB_texture_env_dot3) },
+   { OFF, "GL_ARB_texture_mirrored_repeat",    F(ARB_texture_mirrored_repeat)},
+   { ON,  "GL_ARB_transpose_matrix",           0 },
+   { ON,  "GL_ARB_window_pos",                 F(ARB_window_pos) },
+   { ON,  "GL_EXT_abgr",                       0 },
+   { ON,  "GL_EXT_bgra",                       0 },
+   { OFF, "GL_EXT_blend_color",                F(EXT_blend_color) },
+   { OFF, "GL_EXT_blend_func_separate",        F(EXT_blend_func_separate) },
+   { OFF, "GL_EXT_blend_logic_op",             F(EXT_blend_logic_op) },
+   { OFF, "GL_EXT_blend_minmax",               F(EXT_blend_minmax) },
+   { OFF, "GL_EXT_blend_subtract",             F(EXT_blend_subtract) },
+   { ON,  "GL_EXT_clip_volume_hint",           F(EXT_clip_volume_hint) },
+   { OFF, "GL_EXT_cull_vertex",                0 },
+   { OFF, "GL_EXT_convolution",                F(EXT_convolution) },
+   { ON,  "GL_EXT_compiled_vertex_array",      F(EXT_compiled_vertex_array) },
+   { OFF, "GL_EXT_fog_coord",                  F(EXT_fog_coord) },
+   { OFF, "GL_EXT_histogram",                  F(EXT_histogram) },
+   { ON,  "GL_EXT_packed_pixels",              F(EXT_packed_pixels) },
+   { OFF, "GL_EXT_paletted_texture",           F(EXT_paletted_texture) },
+   { OFF, "GL_EXT_point_parameters",           F(EXT_point_parameters) },
+   { ON,  "GL_EXT_polygon_offset",             F(EXT_polygon_offset) },
+   { ON,  "GL_EXT_rescale_normal",             F(EXT_rescale_normal) },
+   { OFF, "GL_EXT_secondary_color",            F(EXT_secondary_color) },
+   { OFF, "GL_EXT_shared_texture_palette",     F(EXT_shared_texture_palette) },
+   { OFF, "GL_EXT_stencil_wrap",               F(EXT_stencil_wrap) },
+   { ON,  "GL_EXT_texture3D",                  F(EXT_texture3D) },
+   { OFF, "GL_EXT_texture_compression_s3tc",   F(EXT_texture_compression_s3tc) },
+   { OFF, "GL_EXT_texture_edge_clamp",         F(SGIS_texture_edge_clamp) },
+   { OFF, "GL_EXT_texture_env_add",            F(EXT_texture_env_add) },
+   { OFF, "GL_EXT_texture_env_combine",        F(EXT_texture_env_combine) },
+   { OFF, "GL_EXT_texture_env_dot3",           F(EXT_texture_env_dot3) },
+   { OFF, "GL_EXT_texture_filter_anisotropic", F(EXT_texture_filter_anisotropic) },
+   { ON,  "GL_EXT_texture_object",             F(EXT_texture_object) },
+   { OFF, "GL_EXT_texture_lod_bias",           F(EXT_texture_lod_bias) },
+   { ON,  "GL_EXT_vertex_array",               0 },
+   { OFF, "GL_EXT_vertex_array_set",           F(EXT_vertex_array_set) },
+   { OFF, "GL_HP_occlusion_test",              F(HP_occlusion_test) },
+   { ON,  "GL_IBM_rasterpos_clip",             F(IBM_rasterpos_clip) },
+   { OFF, "GL_INGR_blend_func_separate",       F(INGR_blend_func_separate) },
+   { OFF, "GL_MESA_packed_depth_stencil",      0 },
+   { OFF, "GL_MESA_resize_buffers",            F(MESA_resize_buffers) },
+   { OFF, "GL_MESA_sprite_point",              F(MESA_sprite_point) },
+   { ON,  "GL_MESA_window_pos",                F(MESA_window_pos) },
+   { OFF, "GL_NV_blend_square",                F(NV_blend_square) },
+   { ON,  "GL_NV_texgen_reflection",           F(NV_texgen_reflection) },
+   { OFF, "GL_NV_vertex_program",              F(NV_vertex_program) },
+   { OFF, "GL_NV_vertex_program1_1",           F(NV_vertex_program1_1) },
+   { OFF, "GL_SGI_color_matrix",               F(SGI_color_matrix) },
+   { OFF, "GL_SGI_color_table",                F(SGI_color_table) },
+   { OFF, "GL_SGIS_generate_mipmap",           F(SGIS_generate_mipmap) },
+   { OFF, "GL_SGIS_pixel_texture",             F(SGIS_pixel_texture) },
+   { OFF, "GL_SGIS_texture_border_clamp",      F(ARB_texture_border_clamp) },
+   { OFF, "GL_SGIS_texture_edge_clamp",        F(SGIS_texture_edge_clamp) },
+   { OFF, "GL_SGIX_depth_texture",             F(SGIX_depth_texture) },
+   { OFF, "GL_SGIX_pixel_texture",             F(SGIX_pixel_texture) },
+   { OFF, "GL_SGIX_shadow",                    F(SGIX_shadow) },
+   { OFF, "GL_SGIX_shadow_ambient",            F(SGIX_shadow_ambient) },
+   { OFF, "GL_3DFX_texture_compression_FXT1",  F(_3DFX_texture_compression_FXT1) }
 };
 
 
@@ -122,10 +138,17 @@ void
 _mesa_enable_sw_extensions(GLcontext *ctx)
 {
    const char *extensions[] = {
+      "GL_ARB_depth_texture",
       "GL_ARB_imaging",
       "GL_ARB_multitexture",
+      "GL_ARB_shadow",
+      "GL_ARB_shadow_ambient",
+      "GL_ARB_texture_border_clamp",
       "GL_ARB_texture_cube_map",
       "GL_ARB_texture_env_add",
+      "GL_ARB_texture_env_combine",
+      "GL_ARB_texture_env_dot3",
+      "GL_ARB_texture_mirrored_repeat",
       "GL_EXT_blend_color",
       "GL_EXT_blend_func_separate",
       "GL_EXT_blend_logic_op",
@@ -139,6 +162,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
       "GL_EXT_secondary_color",
       "GL_EXT_shared_texture_palette",
       "GL_EXT_stencil_wrap",
+      "GL_EXT_texture_edge_clamp",
       "GL_EXT_texture_env_add",
       "GL_EXT_texture_env_combine",
       "GL_EXT_texture_env_dot3",
@@ -148,10 +172,14 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
       "GL_MESA_resize_buffers",
       "GL_NV_blend_square",
       "GL_NV_texgen_reflection",
+      "GL_NV_vertex_program",
+      "GL_NV_vertex_program1_1",
       "GL_SGI_color_matrix",
       "GL_SGI_color_table",
+      "GL_SGIS_generate_mipmap",
       "GL_SGIS_pixel_texture",
       "GL_SGIS_texture_edge_clamp",
+      "GL_SGIS_texture_border_clamp",
       "GL_SGIX_depth_texture",
       "GL_SGIX_pixel_texture",
       "GL_SGIX_shadow",
@@ -175,13 +203,11 @@ _mesa_enable_imaging_extensions(GLcontext *ctx)
    const char *extensions[] = {
       "GL_ARB_imaging",
       "GL_EXT_blend_color",
-      "GL_EXT_blend_logic_op",
       "GL_EXT_blend_minmax",
       "GL_EXT_blend_subtract",
       "GL_EXT_convolution",
       "GL_EXT_histogram",
       "GL_SGI_color_matrix",
-      "GL_SGI_color_matrix",
       "GL_SGI_color_table",
       NULL
    };
@@ -193,6 +219,34 @@ _mesa_enable_imaging_extensions(GLcontext *ctx)
 }
 
 
+
+/*
+ * Enable all OpenGL 1.3 features and extensions.
+ */
+void
+_mesa_enable_1_3_extensions(GLcontext *ctx)
+{
+   const char *extensions[] = {
+      "GL_ARB_multisample",
+      "GL_ARB_multitexture",
+      "GL_ARB_texture_border_clamp",
+      "GL_ARB_texture_compression",
+      "GL_ARB_texture_cube_map",
+      "GL_ARB_texture_env_add",
+      "GL_ARB_texture_env_combine",
+      "GL_ARB_texture_env_dot3",
+      "GL_ARB_transpose_matrix",
+      NULL
+   };
+   GLuint i;
+
+   for (i = 0; extensions[i]; i++) {
+      _mesa_enable_extension(ctx, extensions[i]);
+   }
+}
+
+
+
 /*
  * Add a new extenstion.  This would be called from a Mesa driver.
  */