added Window-isms previously in gl.h
[mesa.git] / src / mesa / main / enable.c
1 /* $Id: enable.c,v 1.19 2000/05/07 20:41:30 brianp Exp $ */
2
3 /*
4 * Mesa 3-D graphics library
5 * Version: 3.3
6 *
7 * Copyright (C) 1999 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 #ifdef PC_HEADER
29 #include "all.h"
30 #else
31 #include "glheader.h"
32 #include "context.h"
33 #include "enable.h"
34 #include "light.h"
35 #include "macros.h"
36 #include "matrix.h"
37 #include "mmath.h"
38 #include "simple_list.h"
39 #include "types.h"
40 #include "vbfill.h"
41 #include "xform.h"
42 #include "enums.h"
43 #endif
44
45
46
47 /*
48 * Perform glEnable and glDisable calls.
49 */
50 void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
51 {
52 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "gl_enable/disable" );
53
54 if (MESA_VERBOSE & VERBOSE_API)
55 fprintf(stderr, "%s %s (newstate is %x)\n",
56 state ? "glEnable" : "glDisable",
57 gl_lookup_enum_by_nr(cap),
58 ctx->NewState);
59
60 switch (cap) {
61 case GL_ALPHA_TEST:
62 if (ctx->Color.AlphaEnabled!=state) {
63 ctx->Color.AlphaEnabled = state;
64 ctx->NewState |= NEW_RASTER_OPS;
65 }
66 break;
67 case GL_AUTO_NORMAL:
68 ctx->Eval.AutoNormal = state;
69 break;
70 case GL_BLEND:
71 if (ctx->Color.BlendEnabled!=state) {
72 ctx->Color.BlendEnabled = state;
73 /* The following needed to accomodate 1.0 RGB logic op blending */
74 if (ctx->Color.BlendEquation==GL_LOGIC_OP && state) {
75 ctx->Color.ColorLogicOpEnabled = GL_TRUE;
76 }
77 else {
78 ctx->Color.ColorLogicOpEnabled = GL_FALSE;
79 }
80 ctx->NewState |= NEW_RASTER_OPS;
81 }
82 break;
83 case GL_CLIP_PLANE0:
84 case GL_CLIP_PLANE1:
85 case GL_CLIP_PLANE2:
86 case GL_CLIP_PLANE3:
87 case GL_CLIP_PLANE4:
88 case GL_CLIP_PLANE5:
89 if (cap >= GL_CLIP_PLANE0 &&
90 cap <= GL_CLIP_PLANE5 &&
91 ctx->Transform.ClipEnabled[cap-GL_CLIP_PLANE0] != state)
92 {
93 GLuint p = cap-GL_CLIP_PLANE0;
94
95 ctx->Transform.ClipEnabled[p] = state;
96 ctx->NewState |= NEW_USER_CLIP;
97
98 if (state) {
99 ctx->Enabled |= ENABLE_USERCLIP;
100 ctx->Transform.AnyClip++;
101
102 if (ctx->ProjectionMatrix.flags & MAT_DIRTY_ALL_OVER) {
103 gl_matrix_analyze( &ctx->ProjectionMatrix );
104 }
105
106 gl_transform_vector( ctx->Transform.ClipUserPlane[p],
107 ctx->Transform.EyeUserPlane[p],
108 ctx->ProjectionMatrix.inv );
109 } else {
110 if (--ctx->Transform.AnyClip == 0)
111 ctx->Enabled &= ~ENABLE_USERCLIP;
112 }
113 }
114 break;
115 case GL_COLOR_MATERIAL:
116 if (ctx->Light.ColorMaterialEnabled!=state) {
117 ctx->Light.ColorMaterialEnabled = state;
118 ctx->NewState |= NEW_LIGHTING;
119 if (state)
120 gl_update_color_material( ctx, ctx->Current.ByteColor );
121 }
122 break;
123 case GL_CULL_FACE:
124 if (ctx->Polygon.CullFlag!=state) {
125 ctx->Polygon.CullFlag = state;
126 ctx->TriangleCaps ^= DD_TRI_CULL;
127 ctx->NewState |= NEW_POLYGON;
128 }
129 break;
130 case GL_DEPTH_TEST:
131 if (state && ctx->Visual->DepthBits==0) {
132 gl_warning(ctx,"glEnable(GL_DEPTH_TEST) but no depth buffer");
133 return;
134 }
135 if (ctx->Depth.Test!=state) {
136 ctx->Depth.Test = state;
137 ctx->NewState |= NEW_RASTER_OPS;
138 }
139 break;
140 case GL_DITHER:
141 if (ctx->NoDither) {
142 /* MESA_NO_DITHER env var */
143 state = GL_FALSE;
144 }
145 if (ctx->Color.DitherFlag!=state) {
146 ctx->Color.DitherFlag = state;
147 ctx->NewState |= NEW_RASTER_OPS;
148 }
149 break;
150 case GL_FOG:
151 if (ctx->Fog.Enabled!=state) {
152 ctx->Fog.Enabled = state;
153 ctx->Enabled ^= ENABLE_FOG;
154 ctx->NewState |= NEW_FOG|NEW_RASTER_OPS;
155 }
156 break;
157 case GL_HISTOGRAM:
158 ctx->Pixel.HistogramEnabled = state;
159 break;
160 case GL_LIGHT0:
161 case GL_LIGHT1:
162 case GL_LIGHT2:
163 case GL_LIGHT3:
164 case GL_LIGHT4:
165 case GL_LIGHT5:
166 case GL_LIGHT6:
167 case GL_LIGHT7:
168 if (ctx->Light.Light[cap-GL_LIGHT0].Enabled != state)
169 {
170 ctx->Light.Light[cap-GL_LIGHT0].Enabled = state;
171
172 if (state) {
173 insert_at_tail(&ctx->Light.EnabledList,
174 &ctx->Light.Light[cap-GL_LIGHT0]);
175 if (ctx->Light.Enabled)
176 ctx->Enabled |= ENABLE_LIGHT;
177 } else {
178 remove_from_list(&ctx->Light.Light[cap-GL_LIGHT0]);
179 if (is_empty_list(&ctx->Light.EnabledList))
180 ctx->Enabled &= ~ENABLE_LIGHT;
181 }
182
183 ctx->NewState |= NEW_LIGHTING;
184 }
185 break;
186 case GL_LIGHTING:
187 if (ctx->Light.Enabled!=state) {
188 ctx->Light.Enabled = state;
189 ctx->Enabled &= ~ENABLE_LIGHT;
190 if (state)
191 ctx->Enabled |= ENABLE_LIGHT;
192 ctx->NewState |= NEW_LIGHTING;
193 }
194 break;
195 case GL_LINE_SMOOTH:
196 if (ctx->Line.SmoothFlag!=state) {
197 ctx->Line.SmoothFlag = state;
198 ctx->TriangleCaps ^= DD_LINE_SMOOTH;
199 ctx->NewState |= NEW_RASTER_OPS;
200 }
201 break;
202 case GL_LINE_STIPPLE:
203 if (ctx->Line.StippleFlag!=state) {
204 ctx->Line.StippleFlag = state;
205 ctx->TriangleCaps ^= DD_LINE_STIPPLE;
206 ctx->NewState |= NEW_RASTER_OPS;
207 }
208 break;
209 case GL_INDEX_LOGIC_OP:
210 if (ctx->Color.IndexLogicOpEnabled!=state) {
211 ctx->Color.IndexLogicOpEnabled = state;
212 ctx->NewState |= NEW_RASTER_OPS;
213 }
214 break;
215 case GL_COLOR_LOGIC_OP:
216 if (ctx->Color.ColorLogicOpEnabled!=state) {
217 ctx->Color.ColorLogicOpEnabled = state;
218 ctx->NewState |= NEW_RASTER_OPS;
219 }
220 break;
221 case GL_MAP1_COLOR_4:
222 ctx->Eval.Map1Color4 = state;
223 break;
224 case GL_MAP1_INDEX:
225 ctx->Eval.Map1Index = state;
226 break;
227 case GL_MAP1_NORMAL:
228 ctx->Eval.Map1Normal = state;
229 break;
230 case GL_MAP1_TEXTURE_COORD_1:
231 ctx->Eval.Map1TextureCoord1 = state;
232 break;
233 case GL_MAP1_TEXTURE_COORD_2:
234 ctx->Eval.Map1TextureCoord2 = state;
235 break;
236 case GL_MAP1_TEXTURE_COORD_3:
237 ctx->Eval.Map1TextureCoord3 = state;
238 break;
239 case GL_MAP1_TEXTURE_COORD_4:
240 ctx->Eval.Map1TextureCoord4 = state;
241 break;
242 case GL_MAP1_VERTEX_3:
243 ctx->Eval.Map1Vertex3 = state;
244 break;
245 case GL_MAP1_VERTEX_4:
246 ctx->Eval.Map1Vertex4 = state;
247 break;
248 case GL_MAP2_COLOR_4:
249 ctx->Eval.Map2Color4 = state;
250 break;
251 case GL_MAP2_INDEX:
252 ctx->Eval.Map2Index = state;
253 break;
254 case GL_MAP2_NORMAL:
255 ctx->Eval.Map2Normal = state;
256 break;
257 case GL_MAP2_TEXTURE_COORD_1:
258 ctx->Eval.Map2TextureCoord1 = state;
259 break;
260 case GL_MAP2_TEXTURE_COORD_2:
261 ctx->Eval.Map2TextureCoord2 = state;
262 break;
263 case GL_MAP2_TEXTURE_COORD_3:
264 ctx->Eval.Map2TextureCoord3 = state;
265 break;
266 case GL_MAP2_TEXTURE_COORD_4:
267 ctx->Eval.Map2TextureCoord4 = state;
268 break;
269 case GL_MAP2_VERTEX_3:
270 ctx->Eval.Map2Vertex3 = state;
271 break;
272 case GL_MAP2_VERTEX_4:
273 ctx->Eval.Map2Vertex4 = state;
274 break;
275 case GL_MINMAX:
276 ctx->Pixel.MinMaxEnabled = state;
277 break;
278 case GL_NORMALIZE:
279 if (ctx->Transform.Normalize != state) {
280 ctx->Transform.Normalize = state;
281 ctx->NewState |= NEW_NORMAL_TRANSFORM|NEW_LIGHTING;
282 ctx->Enabled ^= ENABLE_NORMALIZE;
283 }
284 break;
285 case GL_POINT_SMOOTH:
286 if (ctx->Point.SmoothFlag!=state) {
287 ctx->Point.SmoothFlag = state;
288 ctx->NewState |= NEW_RASTER_OPS;
289 }
290 break;
291 case GL_POLYGON_SMOOTH:
292 if (ctx->Polygon.SmoothFlag!=state) {
293 ctx->Polygon.SmoothFlag = state;
294 ctx->NewState |= NEW_RASTER_OPS;
295 }
296 break;
297 case GL_POLYGON_STIPPLE:
298 if (ctx->Polygon.StippleFlag!=state) {
299 ctx->Polygon.StippleFlag = state;
300 ctx->TriangleCaps ^= DD_TRI_STIPPLE;
301 ctx->NewState |= NEW_RASTER_OPS;
302 }
303 break;
304 case GL_POLYGON_OFFSET_POINT:
305 if (ctx->Polygon.OffsetPoint!=state) {
306 ctx->Polygon.OffsetPoint = state;
307 ctx->NewState |= NEW_POLYGON;
308 }
309 break;
310 case GL_POLYGON_OFFSET_LINE:
311 if (ctx->Polygon.OffsetLine!=state) {
312 ctx->Polygon.OffsetLine = state;
313 ctx->NewState |= NEW_POLYGON;
314 }
315 break;
316 case GL_POLYGON_OFFSET_FILL:
317 /*case GL_POLYGON_OFFSET_EXT:*/
318 if (ctx->Polygon.OffsetFill!=state) {
319 ctx->Polygon.OffsetFill = state;
320 ctx->NewState |= NEW_POLYGON;
321 }
322 break;
323 case GL_RESCALE_NORMAL_EXT:
324 if (ctx->Transform.RescaleNormals != state) {
325 ctx->Transform.RescaleNormals = state;
326 ctx->NewState |= NEW_NORMAL_TRANSFORM|NEW_LIGHTING;
327 ctx->Enabled ^= ENABLE_RESCALE;
328 }
329 break;
330 case GL_SCISSOR_TEST:
331 if (ctx->Scissor.Enabled!=state) {
332 ctx->Scissor.Enabled = state;
333 ctx->NewState |= NEW_RASTER_OPS;
334 }
335 break;
336 case GL_SHARED_TEXTURE_PALETTE_EXT:
337 ctx->Texture.SharedPalette = state;
338 break;
339 case GL_STENCIL_TEST:
340 if (state && ctx->Visual->StencilBits==0) {
341 gl_warning(ctx, "glEnable(GL_STENCIL_TEST) but no stencil buffer");
342 return;
343 }
344 if (ctx->Stencil.Enabled!=state) {
345 ctx->Stencil.Enabled = state;
346 ctx->NewState |= NEW_RASTER_OPS;
347 ctx->TriangleCaps ^= DD_STENCIL;
348 }
349 break;
350 case GL_TEXTURE_1D:
351 if (ctx->Visual->RGBAflag) {
352 const GLuint curr = ctx->Texture.CurrentUnit;
353 const GLuint flag = TEXTURE0_1D << (curr * 4);
354 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
355 ctx->NewState |= NEW_TEXTURE_ENABLE;
356 if (state) {
357 texUnit->Enabled |= TEXTURE0_1D;
358 ctx->Enabled |= flag;
359 }
360 else {
361 texUnit->Enabled &= ~TEXTURE0_1D;
362 ctx->Enabled &= ~flag;
363 }
364 }
365 break;
366 case GL_TEXTURE_2D:
367 if (ctx->Visual->RGBAflag) {
368 const GLuint curr = ctx->Texture.CurrentUnit;
369 const GLuint flag = TEXTURE0_2D << (curr * 4);
370 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
371 ctx->NewState |= NEW_TEXTURE_ENABLE;
372 if (state) {
373 texUnit->Enabled |= TEXTURE0_2D;
374 ctx->Enabled |= flag;
375 }
376 else {
377 texUnit->Enabled &= ~TEXTURE0_2D;
378 ctx->Enabled &= ~flag;
379 }
380 }
381 break;
382 case GL_TEXTURE_3D:
383 if (ctx->Visual->RGBAflag) {
384 const GLuint curr = ctx->Texture.CurrentUnit;
385 const GLuint flag = TEXTURE0_3D << (curr * 4);
386 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr];
387 ctx->NewState |= NEW_TEXTURE_ENABLE;
388 if (state) {
389 texUnit->Enabled |= TEXTURE0_3D;
390 ctx->Enabled |= flag;
391 }
392 else {
393 texUnit->Enabled &= ~TEXTURE0_3D;
394 ctx->Enabled &= ~flag;
395 }
396 }
397 break;
398 case GL_TEXTURE_GEN_Q:
399 {
400 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
401 if (state)
402 texUnit->TexGenEnabled |= Q_BIT;
403 else
404 texUnit->TexGenEnabled &= ~Q_BIT;
405 ctx->NewState |= NEW_TEXTURING;
406 }
407 break;
408 case GL_TEXTURE_GEN_R:
409 {
410 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
411 if (state)
412 texUnit->TexGenEnabled |= R_BIT;
413 else
414 texUnit->TexGenEnabled &= ~R_BIT;
415 ctx->NewState |= NEW_TEXTURING;
416 }
417 break;
418 case GL_TEXTURE_GEN_S:
419 {
420 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
421 if (state)
422 texUnit->TexGenEnabled |= S_BIT;
423 else
424 texUnit->TexGenEnabled &= ~S_BIT;
425 ctx->NewState |= NEW_TEXTURING;
426 }
427 break;
428 case GL_TEXTURE_GEN_T:
429 {
430 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
431 if (state)
432 texUnit->TexGenEnabled |= T_BIT;
433 else
434 texUnit->TexGenEnabled &= ~T_BIT;
435 ctx->NewState |= NEW_TEXTURING;
436 }
437 break;
438
439 /*
440 * CLIENT STATE!!!
441 */
442 case GL_VERTEX_ARRAY:
443 ctx->Array.Vertex.Enabled = state;
444 break;
445 case GL_NORMAL_ARRAY:
446 ctx->Array.Normal.Enabled = state;
447 break;
448 case GL_COLOR_ARRAY:
449 ctx->Array.Color.Enabled = state;
450 break;
451 case GL_INDEX_ARRAY:
452 ctx->Array.Index.Enabled = state;
453 break;
454 case GL_TEXTURE_COORD_ARRAY:
455 ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled = state;
456 break;
457 case GL_EDGE_FLAG_ARRAY:
458 ctx->Array.EdgeFlag.Enabled = state;
459 break;
460
461 /* GL_HP_occlusion_test */
462 case GL_OCCLUSION_TEST_HP:
463 if (ctx->Extensions.HaveHpOcclusionTest) {
464 ctx->Depth.OcclusionTest = state;
465 if (state)
466 ctx->OcclusionResult = ctx->OcclusionResultSaved;
467 else
468 ctx->OcclusionResultSaved = ctx->OcclusionResult;
469 ctx->NewState |= NEW_RASTER_OPS;
470 }
471 else {
472 gl_error( ctx, GL_INVALID_ENUM, state ? "glEnable": "glDisable" );
473 return;
474 }
475 break;
476
477 /* GL_SGIS_pixel_texture */
478 case GL_PIXEL_TEXTURE_SGIS:
479 ctx->Pixel.PixelTextureEnabled = state;
480 break;
481
482 /* GL_SGIX_pixel_texture */
483 case GL_PIXEL_TEX_GEN_SGIX:
484 ctx->Pixel.PixelTextureEnabled = state;
485 break;
486
487 /* GL_SGI_color_table */
488 case GL_COLOR_TABLE_SGI:
489 ctx->Pixel.ColorTableEnabled = state;
490 break;
491 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
492 ctx->Pixel.PostConvolutionColorTableEnabled = state;
493 break;
494 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
495 ctx->Pixel.PostColorMatrixColorTableEnabled = state;
496 break;
497
498 /* GL_EXT_convolution */
499 case GL_CONVOLUTION_1D:
500 ctx->Pixel.Convolution1DEnabled = state;
501 break;
502 case GL_CONVOLUTION_2D:
503 ctx->Pixel.Convolution2DEnabled = state;
504 break;
505 case GL_SEPARABLE_2D:
506 ctx->Pixel.Separable2DEnabled = state;
507 break;
508
509 default:
510 if (state) {
511 gl_error( ctx, GL_INVALID_ENUM, "glEnable" );
512 }
513 else {
514 gl_error( ctx, GL_INVALID_ENUM, "glDisable" );
515 }
516 return;
517 }
518
519 if (ctx->Driver.Enable) {
520 (*ctx->Driver.Enable)( ctx, cap, state );
521 }
522 }
523
524
525
526
527 void
528 _mesa_Enable( GLenum cap )
529 {
530 GET_CURRENT_CONTEXT(ctx);
531 _mesa_set_enable( ctx, cap, GL_TRUE );
532 }
533
534
535
536 void
537 _mesa_Disable( GLenum cap )
538 {
539 GET_CURRENT_CONTEXT(ctx);
540 _mesa_set_enable( ctx, cap, GL_FALSE );
541 }
542
543
544
545 GLboolean
546 _mesa_IsEnabled( GLenum cap )
547 {
548 GET_CURRENT_CONTEXT(ctx);
549 switch (cap) {
550 case GL_ALPHA_TEST:
551 return ctx->Color.AlphaEnabled;
552 case GL_AUTO_NORMAL:
553 return ctx->Eval.AutoNormal;
554 case GL_BLEND:
555 return ctx->Color.BlendEnabled;
556 case GL_CLIP_PLANE0:
557 case GL_CLIP_PLANE1:
558 case GL_CLIP_PLANE2:
559 case GL_CLIP_PLANE3:
560 case GL_CLIP_PLANE4:
561 case GL_CLIP_PLANE5:
562 return ctx->Transform.ClipEnabled[cap-GL_CLIP_PLANE0];
563 case GL_COLOR_MATERIAL:
564 return ctx->Light.ColorMaterialEnabled;
565 case GL_CULL_FACE:
566 return ctx->Polygon.CullFlag;
567 case GL_DEPTH_TEST:
568 return ctx->Depth.Test;
569 case GL_DITHER:
570 return ctx->Color.DitherFlag;
571 case GL_FOG:
572 return ctx->Fog.Enabled;
573 case GL_HISTOGRAM:
574 return ctx->Pixel.HistogramEnabled;
575 case GL_LIGHTING:
576 return ctx->Light.Enabled;
577 case GL_LIGHT0:
578 case GL_LIGHT1:
579 case GL_LIGHT2:
580 case GL_LIGHT3:
581 case GL_LIGHT4:
582 case GL_LIGHT5:
583 case GL_LIGHT6:
584 case GL_LIGHT7:
585 return ctx->Light.Light[cap-GL_LIGHT0].Enabled;
586 case GL_LINE_SMOOTH:
587 return ctx->Line.SmoothFlag;
588 case GL_LINE_STIPPLE:
589 return ctx->Line.StippleFlag;
590 case GL_INDEX_LOGIC_OP:
591 return ctx->Color.IndexLogicOpEnabled;
592 case GL_COLOR_LOGIC_OP:
593 return ctx->Color.ColorLogicOpEnabled;
594 case GL_MAP1_COLOR_4:
595 return ctx->Eval.Map1Color4;
596 case GL_MAP1_INDEX:
597 return ctx->Eval.Map1Index;
598 case GL_MAP1_NORMAL:
599 return ctx->Eval.Map1Normal;
600 case GL_MAP1_TEXTURE_COORD_1:
601 return ctx->Eval.Map1TextureCoord1;
602 case GL_MAP1_TEXTURE_COORD_2:
603 return ctx->Eval.Map1TextureCoord2;
604 case GL_MAP1_TEXTURE_COORD_3:
605 return ctx->Eval.Map1TextureCoord3;
606 case GL_MAP1_TEXTURE_COORD_4:
607 return ctx->Eval.Map1TextureCoord4;
608 case GL_MAP1_VERTEX_3:
609 return ctx->Eval.Map1Vertex3;
610 case GL_MAP1_VERTEX_4:
611 return ctx->Eval.Map1Vertex4;
612 case GL_MAP2_COLOR_4:
613 return ctx->Eval.Map2Color4;
614 case GL_MAP2_INDEX:
615 return ctx->Eval.Map2Index;
616 case GL_MAP2_NORMAL:
617 return ctx->Eval.Map2Normal;
618 case GL_MAP2_TEXTURE_COORD_1:
619 return ctx->Eval.Map2TextureCoord1;
620 case GL_MAP2_TEXTURE_COORD_2:
621 return ctx->Eval.Map2TextureCoord2;
622 case GL_MAP2_TEXTURE_COORD_3:
623 return ctx->Eval.Map2TextureCoord3;
624 case GL_MAP2_TEXTURE_COORD_4:
625 return ctx->Eval.Map2TextureCoord4;
626 case GL_MAP2_VERTEX_3:
627 return ctx->Eval.Map2Vertex3;
628 case GL_MAP2_VERTEX_4:
629 return ctx->Eval.Map2Vertex4;
630 case GL_MINMAX:
631 return ctx->Pixel.MinMaxEnabled;
632 case GL_NORMALIZE:
633 return ctx->Transform.Normalize;
634 case GL_POINT_SMOOTH:
635 return ctx->Point.SmoothFlag;
636 case GL_POLYGON_SMOOTH:
637 return ctx->Polygon.SmoothFlag;
638 case GL_POLYGON_STIPPLE:
639 return ctx->Polygon.StippleFlag;
640 case GL_POLYGON_OFFSET_POINT:
641 return ctx->Polygon.OffsetPoint;
642 case GL_POLYGON_OFFSET_LINE:
643 return ctx->Polygon.OffsetLine;
644 case GL_POLYGON_OFFSET_FILL:
645 /*case GL_POLYGON_OFFSET_EXT:*/
646 return ctx->Polygon.OffsetFill;
647 case GL_RESCALE_NORMAL_EXT:
648 return ctx->Transform.RescaleNormals;
649 case GL_SCISSOR_TEST:
650 return ctx->Scissor.Enabled;
651 case GL_SHARED_TEXTURE_PALETTE_EXT:
652 return ctx->Texture.SharedPalette;
653 case GL_STENCIL_TEST:
654 return ctx->Stencil.Enabled;
655 case GL_TEXTURE_1D:
656 {
657 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
658 return (texUnit->Enabled & TEXTURE0_1D) ? GL_TRUE : GL_FALSE;
659 }
660 case GL_TEXTURE_2D:
661 {
662 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
663 return (texUnit->Enabled & TEXTURE0_2D) ? GL_TRUE : GL_FALSE;
664 }
665 case GL_TEXTURE_3D:
666 {
667 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
668 return (texUnit->Enabled & TEXTURE0_3D) ? GL_TRUE : GL_FALSE;
669 }
670 case GL_TEXTURE_GEN_Q:
671 {
672 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
673 return (texUnit->TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE;
674 }
675 case GL_TEXTURE_GEN_R:
676 {
677 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
678 return (texUnit->TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE;
679 }
680 case GL_TEXTURE_GEN_S:
681 {
682 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
683 return (texUnit->TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE;
684 }
685 case GL_TEXTURE_GEN_T:
686 {
687 const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
688 return (texUnit->TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE;
689 }
690
691 /*
692 * CLIENT STATE!!!
693 */
694 case GL_VERTEX_ARRAY:
695 return ctx->Array.Vertex.Enabled;
696 case GL_NORMAL_ARRAY:
697 return ctx->Array.Normal.Enabled;
698 case GL_COLOR_ARRAY:
699 return ctx->Array.Color.Enabled;
700 case GL_INDEX_ARRAY:
701 return ctx->Array.Index.Enabled;
702 case GL_TEXTURE_COORD_ARRAY:
703 return ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled;
704 case GL_EDGE_FLAG_ARRAY:
705 return ctx->Array.EdgeFlag.Enabled;
706
707 /* GL_HP_occlusion_test */
708 case GL_OCCLUSION_TEST_HP:
709 if (ctx->Extensions.HaveHpOcclusionTest) {
710 return ctx->Depth.OcclusionTest;
711 }
712 else {
713 gl_error( ctx, GL_INVALID_ENUM, "glIsEnabled" );
714 return GL_FALSE;
715 }
716
717 /* GL_SGIS_pixel_texture */
718 case GL_PIXEL_TEXTURE_SGIS:
719 return ctx->Pixel.PixelTextureEnabled;
720
721 /* GL_SGIX_pixel_texture */
722 case GL_PIXEL_TEX_GEN_SGIX:
723 return ctx->Pixel.PixelTextureEnabled;
724
725 /* GL_SGI_color_table */
726 case GL_COLOR_TABLE_SGI:
727 return ctx->Pixel.ColorTableEnabled;
728 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
729 return ctx->Pixel.PostConvolutionColorTableEnabled;
730 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
731 return ctx->Pixel.PostColorMatrixColorTableEnabled;
732
733 /* GL_EXT_convolution */
734 case GL_CONVOLUTION_1D:
735 return ctx->Pixel.Convolution1DEnabled;
736 case GL_CONVOLUTION_2D:
737 return ctx->Pixel.Convolution2DEnabled;
738 case GL_SEPARABLE_2D:
739 return ctx->Pixel.Separable2DEnabled;
740
741 default:
742 gl_error( ctx, GL_INVALID_ENUM, "glIsEnabled" );
743 return GL_FALSE;
744 }
745 }
746
747
748
749
750 static void
751 client_state( GLcontext *ctx, GLenum cap, GLboolean state )
752 {
753 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx,
754 (state
755 ? "glEnableClientState"
756 : "glDisableClientState") );
757
758 switch (cap) {
759 case GL_VERTEX_ARRAY:
760 ctx->Array.Vertex.Enabled = state;
761 break;
762 case GL_NORMAL_ARRAY:
763 ctx->Array.Normal.Enabled = state;
764 break;
765 case GL_COLOR_ARRAY:
766 ctx->Array.Color.Enabled = state;
767 break;
768 case GL_INDEX_ARRAY:
769 ctx->Array.Index.Enabled = state;
770 break;
771 case GL_TEXTURE_COORD_ARRAY:
772 ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled = state;
773 break;
774 case GL_EDGE_FLAG_ARRAY:
775 ctx->Array.EdgeFlag.Enabled = state;
776 break;
777 default:
778 gl_error( ctx, GL_INVALID_ENUM, "glEnable/DisableClientState" );
779 }
780
781 ctx->NewState |= NEW_CLIENT_STATE;
782 }
783
784
785
786 void
787 _mesa_EnableClientState( GLenum cap )
788 {
789 GET_CURRENT_CONTEXT(ctx);
790 client_state( ctx, cap, GL_TRUE );
791 }
792
793
794
795 void
796 _mesa_DisableClientState( GLenum cap )
797 {
798 GET_CURRENT_CONTEXT(ctx);
799 client_state( ctx, cap, GL_FALSE );
800 }
801