- GLenum p = (GLenum)(GLint) *params;
- if (p == GL_FOG_COORDINATE_EXT || p == GL_FRAGMENT_DEPTH_EXT)
- ctx->Fog.FogCoordinateSource = p;
- else
- gl_error( ctx, GL_INVALID_ENUM, "glFog" );
+ GLenum p = (GLenum) (GLint) *params;
+ if (ctx->API != API_OPENGL_COMPAT ||
+ (p != GL_FOG_COORDINATE_EXT && p != GL_FRAGMENT_DEPTH_EXT)) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "glFog");
+ return;
+ }
+ if (ctx->Fog.FogCoordinateSource == p)
+ return;
+ FLUSH_VERTICES(ctx, _NEW_FOG);
+ ctx->Fog.FogCoordinateSource = p;
+ break;
+ }
+ case GL_FOG_DISTANCE_MODE_NV: {
+ GLenum p = (GLenum) (GLint) *params;
+ if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.NV_fog_distance ||
+ (p != GL_EYE_RADIAL_NV && p != GL_EYE_PLANE && p != GL_EYE_PLANE_ABSOLUTE_NV)) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "glFog");
+ return;
+ }
+ if (ctx->Fog.FogDistanceMode == p)
+ return;
+ FLUSH_VERTICES(ctx, _NEW_FOG);
+ ctx->Fog.FogDistanceMode = p;