1 /* $Id: enable.c,v 1.19 2000/05/07 20:41:30 brianp Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1999 Brian Paul All Rights Reserved.
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:
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
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.
38 #include "simple_list.h"
48 * Perform glEnable and glDisable calls.
50 void _mesa_set_enable( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
52 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
, "gl_enable/disable" );
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
),
62 if (ctx
->Color
.AlphaEnabled
!=state
) {
63 ctx
->Color
.AlphaEnabled
= state
;
64 ctx
->NewState
|= NEW_RASTER_OPS
;
68 ctx
->Eval
.AutoNormal
= state
;
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
;
78 ctx
->Color
.ColorLogicOpEnabled
= GL_FALSE
;
80 ctx
->NewState
|= NEW_RASTER_OPS
;
89 if (cap
>= GL_CLIP_PLANE0
&&
90 cap
<= GL_CLIP_PLANE5
&&
91 ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
] != state
)
93 GLuint p
= cap
-GL_CLIP_PLANE0
;
95 ctx
->Transform
.ClipEnabled
[p
] = state
;
96 ctx
->NewState
|= NEW_USER_CLIP
;
99 ctx
->Enabled
|= ENABLE_USERCLIP
;
100 ctx
->Transform
.AnyClip
++;
102 if (ctx
->ProjectionMatrix
.flags
& MAT_DIRTY_ALL_OVER
) {
103 gl_matrix_analyze( &ctx
->ProjectionMatrix
);
106 gl_transform_vector( ctx
->Transform
.ClipUserPlane
[p
],
107 ctx
->Transform
.EyeUserPlane
[p
],
108 ctx
->ProjectionMatrix
.inv
);
110 if (--ctx
->Transform
.AnyClip
== 0)
111 ctx
->Enabled
&= ~ENABLE_USERCLIP
;
115 case GL_COLOR_MATERIAL
:
116 if (ctx
->Light
.ColorMaterialEnabled
!=state
) {
117 ctx
->Light
.ColorMaterialEnabled
= state
;
118 ctx
->NewState
|= NEW_LIGHTING
;
120 gl_update_color_material( ctx
, ctx
->Current
.ByteColor
);
124 if (ctx
->Polygon
.CullFlag
!=state
) {
125 ctx
->Polygon
.CullFlag
= state
;
126 ctx
->TriangleCaps
^= DD_TRI_CULL
;
127 ctx
->NewState
|= NEW_POLYGON
;
131 if (state
&& ctx
->Visual
->DepthBits
==0) {
132 gl_warning(ctx
,"glEnable(GL_DEPTH_TEST) but no depth buffer");
135 if (ctx
->Depth
.Test
!=state
) {
136 ctx
->Depth
.Test
= state
;
137 ctx
->NewState
|= NEW_RASTER_OPS
;
142 /* MESA_NO_DITHER env var */
145 if (ctx
->Color
.DitherFlag
!=state
) {
146 ctx
->Color
.DitherFlag
= state
;
147 ctx
->NewState
|= NEW_RASTER_OPS
;
151 if (ctx
->Fog
.Enabled
!=state
) {
152 ctx
->Fog
.Enabled
= state
;
153 ctx
->Enabled
^= ENABLE_FOG
;
154 ctx
->NewState
|= NEW_FOG
|NEW_RASTER_OPS
;
158 ctx
->Pixel
.HistogramEnabled
= state
;
168 if (ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
!= state
)
170 ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
= 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
;
178 remove_from_list(&ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
179 if (is_empty_list(&ctx
->Light
.EnabledList
))
180 ctx
->Enabled
&= ~ENABLE_LIGHT
;
183 ctx
->NewState
|= NEW_LIGHTING
;
187 if (ctx
->Light
.Enabled
!=state
) {
188 ctx
->Light
.Enabled
= state
;
189 ctx
->Enabled
&= ~ENABLE_LIGHT
;
191 ctx
->Enabled
|= ENABLE_LIGHT
;
192 ctx
->NewState
|= NEW_LIGHTING
;
196 if (ctx
->Line
.SmoothFlag
!=state
) {
197 ctx
->Line
.SmoothFlag
= state
;
198 ctx
->TriangleCaps
^= DD_LINE_SMOOTH
;
199 ctx
->NewState
|= NEW_RASTER_OPS
;
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
;
209 case GL_INDEX_LOGIC_OP
:
210 if (ctx
->Color
.IndexLogicOpEnabled
!=state
) {
211 ctx
->Color
.IndexLogicOpEnabled
= state
;
212 ctx
->NewState
|= NEW_RASTER_OPS
;
215 case GL_COLOR_LOGIC_OP
:
216 if (ctx
->Color
.ColorLogicOpEnabled
!=state
) {
217 ctx
->Color
.ColorLogicOpEnabled
= state
;
218 ctx
->NewState
|= NEW_RASTER_OPS
;
221 case GL_MAP1_COLOR_4
:
222 ctx
->Eval
.Map1Color4
= state
;
225 ctx
->Eval
.Map1Index
= state
;
228 ctx
->Eval
.Map1Normal
= state
;
230 case GL_MAP1_TEXTURE_COORD_1
:
231 ctx
->Eval
.Map1TextureCoord1
= state
;
233 case GL_MAP1_TEXTURE_COORD_2
:
234 ctx
->Eval
.Map1TextureCoord2
= state
;
236 case GL_MAP1_TEXTURE_COORD_3
:
237 ctx
->Eval
.Map1TextureCoord3
= state
;
239 case GL_MAP1_TEXTURE_COORD_4
:
240 ctx
->Eval
.Map1TextureCoord4
= state
;
242 case GL_MAP1_VERTEX_3
:
243 ctx
->Eval
.Map1Vertex3
= state
;
245 case GL_MAP1_VERTEX_4
:
246 ctx
->Eval
.Map1Vertex4
= state
;
248 case GL_MAP2_COLOR_4
:
249 ctx
->Eval
.Map2Color4
= state
;
252 ctx
->Eval
.Map2Index
= state
;
255 ctx
->Eval
.Map2Normal
= state
;
257 case GL_MAP2_TEXTURE_COORD_1
:
258 ctx
->Eval
.Map2TextureCoord1
= state
;
260 case GL_MAP2_TEXTURE_COORD_2
:
261 ctx
->Eval
.Map2TextureCoord2
= state
;
263 case GL_MAP2_TEXTURE_COORD_3
:
264 ctx
->Eval
.Map2TextureCoord3
= state
;
266 case GL_MAP2_TEXTURE_COORD_4
:
267 ctx
->Eval
.Map2TextureCoord4
= state
;
269 case GL_MAP2_VERTEX_3
:
270 ctx
->Eval
.Map2Vertex3
= state
;
272 case GL_MAP2_VERTEX_4
:
273 ctx
->Eval
.Map2Vertex4
= state
;
276 ctx
->Pixel
.MinMaxEnabled
= state
;
279 if (ctx
->Transform
.Normalize
!= state
) {
280 ctx
->Transform
.Normalize
= state
;
281 ctx
->NewState
|= NEW_NORMAL_TRANSFORM
|NEW_LIGHTING
;
282 ctx
->Enabled
^= ENABLE_NORMALIZE
;
285 case GL_POINT_SMOOTH
:
286 if (ctx
->Point
.SmoothFlag
!=state
) {
287 ctx
->Point
.SmoothFlag
= state
;
288 ctx
->NewState
|= NEW_RASTER_OPS
;
291 case GL_POLYGON_SMOOTH
:
292 if (ctx
->Polygon
.SmoothFlag
!=state
) {
293 ctx
->Polygon
.SmoothFlag
= state
;
294 ctx
->NewState
|= NEW_RASTER_OPS
;
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
;
304 case GL_POLYGON_OFFSET_POINT
:
305 if (ctx
->Polygon
.OffsetPoint
!=state
) {
306 ctx
->Polygon
.OffsetPoint
= state
;
307 ctx
->NewState
|= NEW_POLYGON
;
310 case GL_POLYGON_OFFSET_LINE
:
311 if (ctx
->Polygon
.OffsetLine
!=state
) {
312 ctx
->Polygon
.OffsetLine
= state
;
313 ctx
->NewState
|= NEW_POLYGON
;
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
;
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
;
330 case GL_SCISSOR_TEST
:
331 if (ctx
->Scissor
.Enabled
!=state
) {
332 ctx
->Scissor
.Enabled
= state
;
333 ctx
->NewState
|= NEW_RASTER_OPS
;
336 case GL_SHARED_TEXTURE_PALETTE_EXT
:
337 ctx
->Texture
.SharedPalette
= state
;
339 case GL_STENCIL_TEST
:
340 if (state
&& ctx
->Visual
->StencilBits
==0) {
341 gl_warning(ctx
, "glEnable(GL_STENCIL_TEST) but no stencil buffer");
344 if (ctx
->Stencil
.Enabled
!=state
) {
345 ctx
->Stencil
.Enabled
= state
;
346 ctx
->NewState
|= NEW_RASTER_OPS
;
347 ctx
->TriangleCaps
^= DD_STENCIL
;
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
;
357 texUnit
->Enabled
|= TEXTURE0_1D
;
358 ctx
->Enabled
|= flag
;
361 texUnit
->Enabled
&= ~TEXTURE0_1D
;
362 ctx
->Enabled
&= ~flag
;
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
;
373 texUnit
->Enabled
|= TEXTURE0_2D
;
374 ctx
->Enabled
|= flag
;
377 texUnit
->Enabled
&= ~TEXTURE0_2D
;
378 ctx
->Enabled
&= ~flag
;
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
;
389 texUnit
->Enabled
|= TEXTURE0_3D
;
390 ctx
->Enabled
|= flag
;
393 texUnit
->Enabled
&= ~TEXTURE0_3D
;
394 ctx
->Enabled
&= ~flag
;
398 case GL_TEXTURE_GEN_Q
:
400 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
402 texUnit
->TexGenEnabled
|= Q_BIT
;
404 texUnit
->TexGenEnabled
&= ~Q_BIT
;
405 ctx
->NewState
|= NEW_TEXTURING
;
408 case GL_TEXTURE_GEN_R
:
410 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
412 texUnit
->TexGenEnabled
|= R_BIT
;
414 texUnit
->TexGenEnabled
&= ~R_BIT
;
415 ctx
->NewState
|= NEW_TEXTURING
;
418 case GL_TEXTURE_GEN_S
:
420 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
422 texUnit
->TexGenEnabled
|= S_BIT
;
424 texUnit
->TexGenEnabled
&= ~S_BIT
;
425 ctx
->NewState
|= NEW_TEXTURING
;
428 case GL_TEXTURE_GEN_T
:
430 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
432 texUnit
->TexGenEnabled
|= T_BIT
;
434 texUnit
->TexGenEnabled
&= ~T_BIT
;
435 ctx
->NewState
|= NEW_TEXTURING
;
442 case GL_VERTEX_ARRAY
:
443 ctx
->Array
.Vertex
.Enabled
= state
;
445 case GL_NORMAL_ARRAY
:
446 ctx
->Array
.Normal
.Enabled
= state
;
449 ctx
->Array
.Color
.Enabled
= state
;
452 ctx
->Array
.Index
.Enabled
= state
;
454 case GL_TEXTURE_COORD_ARRAY
:
455 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
457 case GL_EDGE_FLAG_ARRAY
:
458 ctx
->Array
.EdgeFlag
.Enabled
= state
;
461 /* GL_HP_occlusion_test */
462 case GL_OCCLUSION_TEST_HP
:
463 if (ctx
->Extensions
.HaveHpOcclusionTest
) {
464 ctx
->Depth
.OcclusionTest
= state
;
466 ctx
->OcclusionResult
= ctx
->OcclusionResultSaved
;
468 ctx
->OcclusionResultSaved
= ctx
->OcclusionResult
;
469 ctx
->NewState
|= NEW_RASTER_OPS
;
472 gl_error( ctx
, GL_INVALID_ENUM
, state
? "glEnable": "glDisable" );
477 /* GL_SGIS_pixel_texture */
478 case GL_PIXEL_TEXTURE_SGIS
:
479 ctx
->Pixel
.PixelTextureEnabled
= state
;
482 /* GL_SGIX_pixel_texture */
483 case GL_PIXEL_TEX_GEN_SGIX
:
484 ctx
->Pixel
.PixelTextureEnabled
= state
;
487 /* GL_SGI_color_table */
488 case GL_COLOR_TABLE_SGI
:
489 ctx
->Pixel
.ColorTableEnabled
= state
;
491 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI
:
492 ctx
->Pixel
.PostConvolutionColorTableEnabled
= state
;
494 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI
:
495 ctx
->Pixel
.PostColorMatrixColorTableEnabled
= state
;
498 /* GL_EXT_convolution */
499 case GL_CONVOLUTION_1D
:
500 ctx
->Pixel
.Convolution1DEnabled
= state
;
502 case GL_CONVOLUTION_2D
:
503 ctx
->Pixel
.Convolution2DEnabled
= state
;
505 case GL_SEPARABLE_2D
:
506 ctx
->Pixel
.Separable2DEnabled
= state
;
511 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable" );
514 gl_error( ctx
, GL_INVALID_ENUM
, "glDisable" );
519 if (ctx
->Driver
.Enable
) {
520 (*ctx
->Driver
.Enable
)( ctx
, cap
, state
);
528 _mesa_Enable( GLenum cap
)
530 GET_CURRENT_CONTEXT(ctx
);
531 _mesa_set_enable( ctx
, cap
, GL_TRUE
);
537 _mesa_Disable( GLenum cap
)
539 GET_CURRENT_CONTEXT(ctx
);
540 _mesa_set_enable( ctx
, cap
, GL_FALSE
);
546 _mesa_IsEnabled( GLenum cap
)
548 GET_CURRENT_CONTEXT(ctx
);
551 return ctx
->Color
.AlphaEnabled
;
553 return ctx
->Eval
.AutoNormal
;
555 return ctx
->Color
.BlendEnabled
;
562 return ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
];
563 case GL_COLOR_MATERIAL
:
564 return ctx
->Light
.ColorMaterialEnabled
;
566 return ctx
->Polygon
.CullFlag
;
568 return ctx
->Depth
.Test
;
570 return ctx
->Color
.DitherFlag
;
572 return ctx
->Fog
.Enabled
;
574 return ctx
->Pixel
.HistogramEnabled
;
576 return ctx
->Light
.Enabled
;
585 return ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
;
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
;
597 return ctx
->Eval
.Map1Index
;
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
;
615 return ctx
->Eval
.Map2Index
;
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
;
631 return ctx
->Pixel
.MinMaxEnabled
;
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
;
657 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
658 return (texUnit
->Enabled
& TEXTURE0_1D
) ? GL_TRUE
: GL_FALSE
;
662 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
663 return (texUnit
->Enabled
& TEXTURE0_2D
) ? GL_TRUE
: GL_FALSE
;
667 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
668 return (texUnit
->Enabled
& TEXTURE0_3D
) ? GL_TRUE
: GL_FALSE
;
670 case GL_TEXTURE_GEN_Q
:
672 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
673 return (texUnit
->TexGenEnabled
& Q_BIT
) ? GL_TRUE
: GL_FALSE
;
675 case GL_TEXTURE_GEN_R
:
677 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
678 return (texUnit
->TexGenEnabled
& R_BIT
) ? GL_TRUE
: GL_FALSE
;
680 case GL_TEXTURE_GEN_S
:
682 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
683 return (texUnit
->TexGenEnabled
& S_BIT
) ? GL_TRUE
: GL_FALSE
;
685 case GL_TEXTURE_GEN_T
:
687 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
688 return (texUnit
->TexGenEnabled
& T_BIT
) ? GL_TRUE
: GL_FALSE
;
694 case GL_VERTEX_ARRAY
:
695 return ctx
->Array
.Vertex
.Enabled
;
696 case GL_NORMAL_ARRAY
:
697 return ctx
->Array
.Normal
.Enabled
;
699 return ctx
->Array
.Color
.Enabled
;
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
;
707 /* GL_HP_occlusion_test */
708 case GL_OCCLUSION_TEST_HP
:
709 if (ctx
->Extensions
.HaveHpOcclusionTest
) {
710 return ctx
->Depth
.OcclusionTest
;
713 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
717 /* GL_SGIS_pixel_texture */
718 case GL_PIXEL_TEXTURE_SGIS
:
719 return ctx
->Pixel
.PixelTextureEnabled
;
721 /* GL_SGIX_pixel_texture */
722 case GL_PIXEL_TEX_GEN_SGIX
:
723 return ctx
->Pixel
.PixelTextureEnabled
;
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
;
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
;
742 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
751 client_state( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
753 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
,
755 ? "glEnableClientState"
756 : "glDisableClientState") );
759 case GL_VERTEX_ARRAY
:
760 ctx
->Array
.Vertex
.Enabled
= state
;
762 case GL_NORMAL_ARRAY
:
763 ctx
->Array
.Normal
.Enabled
= state
;
766 ctx
->Array
.Color
.Enabled
= state
;
769 ctx
->Array
.Index
.Enabled
= state
;
771 case GL_TEXTURE_COORD_ARRAY
:
772 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
774 case GL_EDGE_FLAG_ARRAY
:
775 ctx
->Array
.EdgeFlag
.Enabled
= state
;
778 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable/DisableClientState" );
781 ctx
->NewState
|= NEW_CLIENT_STATE
;
787 _mesa_EnableClientState( GLenum cap
)
789 GET_CURRENT_CONTEXT(ctx
);
790 client_state( ctx
, cap
, GL_TRUE
);
796 _mesa_DisableClientState( GLenum cap
)
798 GET_CURRENT_CONTEXT(ctx
);
799 client_state( ctx
, cap
, GL_FALSE
);