added Window-isms previously in gl.h
[mesa.git] / src / mesa / main / extensions.c
index b3b7a05382e9a10bcb7913d75310af384c373297..6c0837de138b8e620c5db9e2bf74a112a71b8360 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: extensions.c,v 1.18 2000/02/25 03:55:40 keithw Exp $ */
+/* $Id: extensions.c,v 1.25 2000/05/04 13:48:49 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -41,7 +41,7 @@
 
 struct extension {
    struct extension *next, *prev;
-   int enabled;
+   GLint enabled;
    char name[MAX_EXT_NAMELEN+1];
    void (*notify)( GLcontext *, GLboolean ); 
 };
@@ -49,37 +49,58 @@ struct extension {
 
 
 static struct { int enabled; const char *name; } default_extensions[] = {
+   { DEFAULT_OFF,    "GL_ARB_imaging" },
+   { DEFAULT_ON,     "GL_ARB_multitexture" },
+   { ALWAYS_ENABLED, "GL_ARB_tranpose_matrix" },
+   { ALWAYS_ENABLED, "GL_EXT_abgr" },
    { DEFAULT_ON,     "GL_EXT_blend_color" },
-   { DEFAULT_OFF,    "ARB_imaging" },
-   { DEFAULT_ON,     "GL_EXT_blend_minmax" },
    { DEFAULT_ON,     "GL_EXT_blend_logic_op" },
+   { DEFAULT_ON,     "GL_EXT_blend_minmax" },
    { DEFAULT_ON,     "GL_EXT_blend_subtract" },
+   { DEFAULT_ON,     "GL_EXT_clip_volume_hint" },
+   { DEFAULT_ON,     "GL_EXT_compiled_vertex_array" },
+   { DEFAULT_ON,     "GL_EXT_histogram" },
    { DEFAULT_ON,     "GL_EXT_paletted_texture" },
    { DEFAULT_ON,     "GL_EXT_point_parameters" },
    { ALWAYS_ENABLED, "GL_EXT_polygon_offset" },
-   { ALWAYS_ENABLED, "GL_EXT_vertex_array" },
-   { ALWAYS_ENABLED, "GL_EXT_texture_object" },
-   { DEFAULT_ON,     "GL_EXT_texture3D" },
-   { ALWAYS_ENABLED, "GL_MESA_window_pos" },
-   { ALWAYS_ENABLED, "GL_MESA_resize_buffers" },
-   { DEFAULT_ON,     "GL_EXT_shared_texture_palette" },
    { ALWAYS_ENABLED, "GL_EXT_rescale_normal" },
-   { ALWAYS_ENABLED, "GL_EXT_abgr" },
-   { ALWAYS_ENABLED, "GL_SGIS_texture_edge_clamp" },
+   { DEFAULT_ON,     "GL_EXT_shared_texture_palette" },
    { ALWAYS_ENABLED, "GL_EXT_stencil_wrap" },
+   { DEFAULT_ON,     "GL_EXT_texture3D" },
+   { DEFAULT_OFF,    "GL_EXT_texture_env" },
+   { DEFAULT_ON,     "GL_EXT_texture_env_add" },
+   { ALWAYS_ENABLED, "GL_EXT_texture_object" },
+   { DEFAULT_ON,     "GL_EXT_texture_lod_bias" },
+   { ALWAYS_ENABLED, "GL_EXT_vertex_array" },
+   { DEFAULT_OFF,    "GL_EXT_vertex_array_set" },
+   { DEFAULT_OFF,    "GL_HP_occlusion_test" },
    { DEFAULT_ON,     "GL_INGR_blend_func_separate" },
-   { DEFAULT_ON,     "GL_ARB_multitexture" },
+   { ALWAYS_ENABLED, "GL_MESA_window_pos" },
+   { ALWAYS_ENABLED, "GL_MESA_resize_buffers" },
    { ALWAYS_ENABLED, "GL_NV_texgen_reflection" },
    { DEFAULT_ON,     "GL_PGI_misc_hints" },
-   { DEFAULT_ON,     "GL_EXT_compiled_vertex_array" },
-   { DEFAULT_ON,     "GL_EXT_clip_volume_hint" },
-   { DEFAULT_ON,     "GL_EXT_texture_env_add" },
-   { ALWAYS_ENABLED, "GL_ARB_tranpose_matrix" },
-   { DEFAULT_OFF,    "GL_EXT_vertex_array_set" },
-   { DEFAULT_OFF,    "GL_EXT_texture_env" },
+   { DEFAULT_ON,     "GL_SGI_color_matrix" },
+   { DEFAULT_ON,     "GL_SGI_color_table" },
+   { DEFAULT_ON,     "GL_SGIS_pixel_texture" },
+   { DEFAULT_ON,     "GL_SGIS_texture_edge_clamp" },
+   { DEFAULT_ON,     "GL_SGIX_pixel_texture" }
 };
 
 
+/*
+ * Update the boolean convenience flags in the Extensions struct.
+ */
+static void
+update_extension_flags( GLcontext *ctx )
+{
+   /* Update flags */
+   ctx->Extensions.HaveTextureEnvAdd = gl_extension_is_enabled(ctx, "GL_EXT_texture_env_add");
+   ctx->Extensions.HaveTextureLodBias = gl_extension_is_enabled(ctx, "GL_EXT_texture_lod_bias");
+   ctx->Extensions.HaveHpOcclusionTest = gl_extension_is_enabled(ctx, "GL_HP_occlusion_test");
+}
+
+
+
 int gl_extensions_add( GLcontext *ctx, 
                       int state, 
                       const char *name, 
@@ -101,21 +122,26 @@ int gl_extensions_add( GLcontext *ctx,
 }
 
 
-static int set_extension( GLcontext *ctx, const char *name, GLuint state )
+/*
+ * Either enable or disable the named extension.
+ */
+static int set_extension( GLcontext *ctx, const char *name, GLint state )
 {
    struct extension *i;
    foreach( i, ctx->Extensions.ext_list ) 
       if (strncmp(i->name, name, MAX_EXT_NAMELEN) == 0) 
         break;
 
-   if (i == ctx->Extensions.ext_list) return 1;
+   if (i == ctx->Extensions.ext_list)
+      return 1;
 
-   if (i->enabled && !(i->enabled & ALWAYS_ENABLED))
-   {
+   if (!(i->enabled & ALWAYS_ENABLED)) {
       if (i->notify) i->notify( ctx, state );      
       i->enabled = state;
    }
 
+   update_extension_flags(ctx);
+
    return 0;
 }   
 
@@ -189,6 +215,7 @@ void gl_extensions_ctr( GLcontext *ctx )
                         default_extensions[i].name,
                         0 );
    }
+   update_extension_flags(ctx);
 }