Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
55 pj 1
/* $Id: hint.c,v 1.1 2003-02-28 11:42:02 pj Exp $ */
2
 
3
/*
4
 * Mesa 3-D graphics library
5
 * Version:  4.1
6
 *
7
 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
8
 *
9
 * Permission is hereby granted, free of charge, to any person obtaining a
10
 * copy of this software and associated documentation files (the "Software"),
11
 * to deal in the Software without restriction, including without limitation
12
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13
 * and/or sell copies of the Software, and to permit persons to whom the
14
 * Software is furnished to do so, subject to the following conditions:
15
 *
16
 * The above copyright notice and this permission notice shall be included
17
 * in all copies or substantial portions of the Software.
18
 *
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
 */
26
 
27
 
28
#include "glheader.h"
29
#include "enums.h"
30
#include "context.h"
31
#include "hint.h"
32
#include "imports.h"
33
 
34
 
35
 
36
void
37
_mesa_Hint( GLenum target, GLenum mode )
38
{
39
   GET_CURRENT_CONTEXT(ctx);
40
   ASSERT_OUTSIDE_BEGIN_END(ctx);
41
 
42
   if (MESA_VERBOSE & VERBOSE_API)
43
      _mesa_debug(ctx, "glHint %s %d\n",
44
                  _mesa_lookup_enum_by_nr(target), mode);
45
 
46
   if (mode != GL_NICEST && mode != GL_FASTEST && mode != GL_DONT_CARE) {
47
      _mesa_error(ctx, GL_INVALID_ENUM, "glHint(mode)");
48
      return;
49
   }
50
 
51
   switch (target) {
52
      case GL_FOG_HINT:
53
         if (ctx->Hint.Fog == mode)
54
            return;
55
         FLUSH_VERTICES(ctx, _NEW_HINT);
56
         ctx->Hint.Fog = mode;
57
         break;
58
      case GL_LINE_SMOOTH_HINT:
59
         if (ctx->Hint.LineSmooth == mode)
60
            return;
61
         FLUSH_VERTICES(ctx, _NEW_HINT);
62
         ctx->Hint.LineSmooth = mode;
63
         break;
64
      case GL_PERSPECTIVE_CORRECTION_HINT:
65
         if (ctx->Hint.PerspectiveCorrection == mode)
66
            return;
67
         FLUSH_VERTICES(ctx, _NEW_HINT);
68
         ctx->Hint.PerspectiveCorrection = mode;
69
         break;
70
      case GL_POINT_SMOOTH_HINT:
71
         if (ctx->Hint.PointSmooth == mode)
72
            return;
73
         FLUSH_VERTICES(ctx, _NEW_HINT);
74
         ctx->Hint.PointSmooth = mode;
75
         break;
76
      case GL_POLYGON_SMOOTH_HINT:
77
         if (ctx->Hint.PolygonSmooth == mode)
78
            return;
79
         FLUSH_VERTICES(ctx, _NEW_HINT);
80
         ctx->Hint.PolygonSmooth = mode;
81
         break;
82
 
83
      /* GL_EXT_clip_volume_hint */
84
      case GL_CLIP_VOLUME_CLIPPING_HINT_EXT:
85
         if (ctx->Hint.ClipVolumeClipping == mode)
86
            return;
87
         FLUSH_VERTICES(ctx, _NEW_HINT);
88
         ctx->Hint.ClipVolumeClipping = mode;
89
         break;
90
 
91
      /* GL_ARB_texture_compression */
92
      case GL_TEXTURE_COMPRESSION_HINT_ARB:
93
         if (!ctx->Extensions.ARB_texture_compression) {
94
            _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)");
95
            return;
96
         }
97
         if (ctx->Hint.TextureCompression == mode)
98
            return;
99
         FLUSH_VERTICES(ctx, _NEW_HINT);
100
         ctx->Hint.TextureCompression = mode;
101
         break;
102
 
103
      /* GL_SGIS_generate_mipmap */
104
      case GL_GENERATE_MIPMAP_HINT_SGIS:
105
         if (!ctx->Extensions.SGIS_generate_mipmap) {
106
            _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)");
107
            return;
108
         }
109
         if (ctx->Hint.GenerateMipmap == mode)
110
            return;
111
         FLUSH_VERTICES(ctx, _NEW_HINT);
112
         ctx->Hint.GenerateMipmap = mode;
113
         break;
114
 
115
      default:
116
         _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)");
117
         return;
118
   }
119
 
120
   if (ctx->Driver.Hint) {
121
      (*ctx->Driver.Hint)( ctx, target, mode );
122
   }
123
}