-/* $Id: enable.c,v 1.3 1999/08/26 14:50:49 keithw Exp $ */
+/* $Id: enable.c,v 1.19 2000/05/07 20:41:30 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.1
+ * Version: 3.3
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
#ifdef PC_HEADER
#include "all.h"
#else
-#include <string.h>
-#include <stdio.h>
+#include "glheader.h"
#include "context.h"
#include "enable.h"
#include "light.h"
#include "vbfill.h"
#include "xform.h"
#include "enums.h"
-#ifdef XFree86Server
-#include "GL/xf86glx.h"
-#endif
#endif
/*
* Perform glEnable and glDisable calls.
*/
-void gl_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
+void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
{
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "gl_enable/disable" );
if (ctx->Light.ColorMaterialEnabled!=state) {
ctx->Light.ColorMaterialEnabled = state;
ctx->NewState |= NEW_LIGHTING;
+ if (state)
+ gl_update_color_material( ctx, ctx->Current.ByteColor );
}
break;
case GL_CULL_FACE:
ctx->NewState |= NEW_FOG|NEW_RASTER_OPS;
}
break;
+ case GL_HISTOGRAM:
+ ctx->Pixel.HistogramEnabled = state;
+ break;
case GL_LIGHT0:
case GL_LIGHT1:
case GL_LIGHT2:
if (ctx->Light.Enabled!=state) {
ctx->Light.Enabled = state;
ctx->Enabled &= ~ENABLE_LIGHT;
- if (state && !is_empty_list(&ctx->Light.EnabledList))
+ if (state)
ctx->Enabled |= ENABLE_LIGHT;
ctx->NewState |= NEW_LIGHTING;
}
case GL_LINE_SMOOTH:
if (ctx->Line.SmoothFlag!=state) {
ctx->Line.SmoothFlag = state;
+ ctx->TriangleCaps ^= DD_LINE_SMOOTH;
ctx->NewState |= NEW_RASTER_OPS;
}
break;
case GL_MAP2_VERTEX_4:
ctx->Eval.Map2Vertex4 = state;
break;
+ case GL_MINMAX:
+ ctx->Pixel.MinMaxEnabled = state;
+ break;
case GL_NORMALIZE:
if (ctx->Transform.Normalize != state) {
ctx->Transform.Normalize = state;
break;
case GL_SHARED_TEXTURE_PALETTE_EXT:
ctx->Texture.SharedPalette = state;
- if (ctx->Driver.UseGlobalTexturePalette)
- (*ctx->Driver.UseGlobalTexturePalette)( ctx, state );
break;
case GL_STENCIL_TEST:
if (state && ctx->Visual->StencilBits==0) {
if (ctx->Stencil.Enabled!=state) {
ctx->Stencil.Enabled = state;
ctx->NewState |= NEW_RASTER_OPS;
+ ctx->TriangleCaps ^= DD_STENCIL;
}
break;
case GL_TEXTURE_1D:
ctx->Array.Index.Enabled = state;
break;
case GL_TEXTURE_COORD_ARRAY:
- ctx->Array.TexCoord[ctx->TexCoordUnit].Enabled = state;
+ ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled = state;
break;
case GL_EDGE_FLAG_ARRAY:
ctx->Array.EdgeFlag.Enabled = state;
break;
+ /* GL_HP_occlusion_test */
+ case GL_OCCLUSION_TEST_HP:
+ if (ctx->Extensions.HaveHpOcclusionTest) {
+ ctx->Depth.OcclusionTest = state;
+ if (state)
+ ctx->OcclusionResult = ctx->OcclusionResultSaved;
+ else
+ ctx->OcclusionResultSaved = ctx->OcclusionResult;
+ ctx->NewState |= NEW_RASTER_OPS;
+ }
+ else {
+ gl_error( ctx, GL_INVALID_ENUM, state ? "glEnable": "glDisable" );
+ return;
+ }
+ break;
+
+ /* GL_SGIS_pixel_texture */
+ case GL_PIXEL_TEXTURE_SGIS:
+ ctx->Pixel.PixelTextureEnabled = state;
+ break;
+
+ /* GL_SGIX_pixel_texture */
+ case GL_PIXEL_TEX_GEN_SGIX:
+ ctx->Pixel.PixelTextureEnabled = state;
+ break;
+
+ /* GL_SGI_color_table */
+ case GL_COLOR_TABLE_SGI:
+ ctx->Pixel.ColorTableEnabled = state;
+ break;
+ case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
+ ctx->Pixel.PostConvolutionColorTableEnabled = state;
+ break;
+ case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
+ ctx->Pixel.PostColorMatrixColorTableEnabled = state;
+ break;
+
+ /* GL_EXT_convolution */
+ case GL_CONVOLUTION_1D:
+ ctx->Pixel.Convolution1DEnabled = state;
+ break;
+ case GL_CONVOLUTION_2D:
+ ctx->Pixel.Convolution2DEnabled = state;
+ break;
+ case GL_SEPARABLE_2D:
+ ctx->Pixel.Separable2DEnabled = state;
+ break;
+
default:
if (state) {
gl_error( ctx, GL_INVALID_ENUM, "glEnable" );
-void gl_Enable( GLcontext* ctx, GLenum cap )
+void
+_mesa_Enable( GLenum cap )
{
- gl_set_enable( ctx, cap, GL_TRUE );
+ GET_CURRENT_CONTEXT(ctx);
+ _mesa_set_enable( ctx, cap, GL_TRUE );
}
-void gl_Disable( GLcontext* ctx, GLenum cap )
+void
+_mesa_Disable( GLenum cap )
{
- gl_set_enable( ctx, cap, GL_FALSE );
+ GET_CURRENT_CONTEXT(ctx);
+ _mesa_set_enable( ctx, cap, GL_FALSE );
}
-GLboolean gl_IsEnabled( GLcontext* ctx, GLenum cap )
+GLboolean
+_mesa_IsEnabled( GLenum cap )
{
+ GET_CURRENT_CONTEXT(ctx);
switch (cap) {
case GL_ALPHA_TEST:
return ctx->Color.AlphaEnabled;
return ctx->Color.DitherFlag;
case GL_FOG:
return ctx->Fog.Enabled;
+ case GL_HISTOGRAM:
+ return ctx->Pixel.HistogramEnabled;
case GL_LIGHTING:
return ctx->Light.Enabled;
case GL_LIGHT0:
return ctx->Eval.Map2Vertex3;
case GL_MAP2_VERTEX_4:
return ctx->Eval.Map2Vertex4;
+ case GL_MINMAX:
+ return ctx->Pixel.MinMaxEnabled;
case GL_NORMALIZE:
return ctx->Transform.Normalize;
case GL_POINT_SMOOTH:
case GL_INDEX_ARRAY:
return ctx->Array.Index.Enabled;
case GL_TEXTURE_COORD_ARRAY:
- return ctx->Array.TexCoord[ctx->TexCoordUnit].Enabled;
+ return ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled;
case GL_EDGE_FLAG_ARRAY:
return ctx->Array.EdgeFlag.Enabled;
+
+ /* GL_HP_occlusion_test */
+ case GL_OCCLUSION_TEST_HP:
+ if (ctx->Extensions.HaveHpOcclusionTest) {
+ return ctx->Depth.OcclusionTest;
+ }
+ else {
+ gl_error( ctx, GL_INVALID_ENUM, "glIsEnabled" );
+ return GL_FALSE;
+ }
+
+ /* GL_SGIS_pixel_texture */
+ case GL_PIXEL_TEXTURE_SGIS:
+ return ctx->Pixel.PixelTextureEnabled;
+
+ /* GL_SGIX_pixel_texture */
+ case GL_PIXEL_TEX_GEN_SGIX:
+ return ctx->Pixel.PixelTextureEnabled;
+
+ /* GL_SGI_color_table */
+ case GL_COLOR_TABLE_SGI:
+ return ctx->Pixel.ColorTableEnabled;
+ case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
+ return ctx->Pixel.PostConvolutionColorTableEnabled;
+ case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
+ return ctx->Pixel.PostColorMatrixColorTableEnabled;
+
+ /* GL_EXT_convolution */
+ case GL_CONVOLUTION_1D:
+ return ctx->Pixel.Convolution1DEnabled;
+ case GL_CONVOLUTION_2D:
+ return ctx->Pixel.Convolution2DEnabled;
+ case GL_SEPARABLE_2D:
+ return ctx->Pixel.Separable2DEnabled;
+
default:
gl_error( ctx, GL_INVALID_ENUM, "glIsEnabled" );
return GL_FALSE;
-static void gl_client_state( GLcontext *ctx, GLenum cap, GLboolean state )
+static void
+client_state( GLcontext *ctx, GLenum cap, GLboolean state )
{
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx,
(state
ctx->Array.Index.Enabled = state;
break;
case GL_TEXTURE_COORD_ARRAY:
- ctx->Array.TexCoord[ctx->TexCoordUnit].Enabled = state;
+ ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled = state;
break;
case GL_EDGE_FLAG_ARRAY:
ctx->Array.EdgeFlag.Enabled = state;
-void gl_EnableClientState( GLcontext *ctx, GLenum cap )
+void
+_mesa_EnableClientState( GLenum cap )
{
- gl_client_state( ctx, cap, GL_TRUE );
+ GET_CURRENT_CONTEXT(ctx);
+ client_state( ctx, cap, GL_TRUE );
}
-void gl_DisableClientState( GLcontext *ctx, GLenum cap )
+void
+_mesa_DisableClientState( GLenum cap )
{
- gl_client_state( ctx, cap, GL_FALSE );
+ GET_CURRENT_CONTEXT(ctx);
+ client_state( ctx, cap, GL_FALSE );
}