1 /* $Id: enable.c,v 1.20 2000/05/22 16:33:21 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
;
509 /* GL_ARB_texture_cube_map */
510 case GL_TEXTURE_CUBE_MAP_ARB
:
512 if (ctx
->Visual
->RGBAflag
) {
513 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
514 const GLuint flag
= TEXTURE0_CUBE
<< (curr
* 4);
515 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
516 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
518 texUnit
->Enabled
|= TEXTURE0_2D
;
519 ctx
->Enabled
|= flag
;
522 texUnit
->Enabled
&= ~TEXTURE0_2D
;
523 ctx
->Enabled
&= ~flag
;
531 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable" );
534 gl_error( ctx
, GL_INVALID_ENUM
, "glDisable" );
539 if (ctx
->Driver
.Enable
) {
540 (*ctx
->Driver
.Enable
)( ctx
, cap
, state
);
548 _mesa_Enable( GLenum cap
)
550 GET_CURRENT_CONTEXT(ctx
);
551 _mesa_set_enable( ctx
, cap
, GL_TRUE
);
557 _mesa_Disable( GLenum cap
)
559 GET_CURRENT_CONTEXT(ctx
);
560 _mesa_set_enable( ctx
, cap
, GL_FALSE
);
566 _mesa_IsEnabled( GLenum cap
)
568 GET_CURRENT_CONTEXT(ctx
);
571 return ctx
->Color
.AlphaEnabled
;
573 return ctx
->Eval
.AutoNormal
;
575 return ctx
->Color
.BlendEnabled
;
582 return ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
];
583 case GL_COLOR_MATERIAL
:
584 return ctx
->Light
.ColorMaterialEnabled
;
586 return ctx
->Polygon
.CullFlag
;
588 return ctx
->Depth
.Test
;
590 return ctx
->Color
.DitherFlag
;
592 return ctx
->Fog
.Enabled
;
594 return ctx
->Pixel
.HistogramEnabled
;
596 return ctx
->Light
.Enabled
;
605 return ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
;
607 return ctx
->Line
.SmoothFlag
;
608 case GL_LINE_STIPPLE
:
609 return ctx
->Line
.StippleFlag
;
610 case GL_INDEX_LOGIC_OP
:
611 return ctx
->Color
.IndexLogicOpEnabled
;
612 case GL_COLOR_LOGIC_OP
:
613 return ctx
->Color
.ColorLogicOpEnabled
;
614 case GL_MAP1_COLOR_4
:
615 return ctx
->Eval
.Map1Color4
;
617 return ctx
->Eval
.Map1Index
;
619 return ctx
->Eval
.Map1Normal
;
620 case GL_MAP1_TEXTURE_COORD_1
:
621 return ctx
->Eval
.Map1TextureCoord1
;
622 case GL_MAP1_TEXTURE_COORD_2
:
623 return ctx
->Eval
.Map1TextureCoord2
;
624 case GL_MAP1_TEXTURE_COORD_3
:
625 return ctx
->Eval
.Map1TextureCoord3
;
626 case GL_MAP1_TEXTURE_COORD_4
:
627 return ctx
->Eval
.Map1TextureCoord4
;
628 case GL_MAP1_VERTEX_3
:
629 return ctx
->Eval
.Map1Vertex3
;
630 case GL_MAP1_VERTEX_4
:
631 return ctx
->Eval
.Map1Vertex4
;
632 case GL_MAP2_COLOR_4
:
633 return ctx
->Eval
.Map2Color4
;
635 return ctx
->Eval
.Map2Index
;
637 return ctx
->Eval
.Map2Normal
;
638 case GL_MAP2_TEXTURE_COORD_1
:
639 return ctx
->Eval
.Map2TextureCoord1
;
640 case GL_MAP2_TEXTURE_COORD_2
:
641 return ctx
->Eval
.Map2TextureCoord2
;
642 case GL_MAP2_TEXTURE_COORD_3
:
643 return ctx
->Eval
.Map2TextureCoord3
;
644 case GL_MAP2_TEXTURE_COORD_4
:
645 return ctx
->Eval
.Map2TextureCoord4
;
646 case GL_MAP2_VERTEX_3
:
647 return ctx
->Eval
.Map2Vertex3
;
648 case GL_MAP2_VERTEX_4
:
649 return ctx
->Eval
.Map2Vertex4
;
651 return ctx
->Pixel
.MinMaxEnabled
;
653 return ctx
->Transform
.Normalize
;
654 case GL_POINT_SMOOTH
:
655 return ctx
->Point
.SmoothFlag
;
656 case GL_POLYGON_SMOOTH
:
657 return ctx
->Polygon
.SmoothFlag
;
658 case GL_POLYGON_STIPPLE
:
659 return ctx
->Polygon
.StippleFlag
;
660 case GL_POLYGON_OFFSET_POINT
:
661 return ctx
->Polygon
.OffsetPoint
;
662 case GL_POLYGON_OFFSET_LINE
:
663 return ctx
->Polygon
.OffsetLine
;
664 case GL_POLYGON_OFFSET_FILL
:
665 /*case GL_POLYGON_OFFSET_EXT:*/
666 return ctx
->Polygon
.OffsetFill
;
667 case GL_RESCALE_NORMAL_EXT
:
668 return ctx
->Transform
.RescaleNormals
;
669 case GL_SCISSOR_TEST
:
670 return ctx
->Scissor
.Enabled
;
671 case GL_SHARED_TEXTURE_PALETTE_EXT
:
672 return ctx
->Texture
.SharedPalette
;
673 case GL_STENCIL_TEST
:
674 return ctx
->Stencil
.Enabled
;
677 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
678 return (texUnit
->Enabled
& TEXTURE0_1D
) ? GL_TRUE
: GL_FALSE
;
682 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
683 return (texUnit
->Enabled
& TEXTURE0_2D
) ? GL_TRUE
: GL_FALSE
;
687 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
688 return (texUnit
->Enabled
& TEXTURE0_3D
) ? GL_TRUE
: GL_FALSE
;
690 case GL_TEXTURE_GEN_Q
:
692 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
693 return (texUnit
->TexGenEnabled
& Q_BIT
) ? GL_TRUE
: GL_FALSE
;
695 case GL_TEXTURE_GEN_R
:
697 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
698 return (texUnit
->TexGenEnabled
& R_BIT
) ? GL_TRUE
: GL_FALSE
;
700 case GL_TEXTURE_GEN_S
:
702 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
703 return (texUnit
->TexGenEnabled
& S_BIT
) ? GL_TRUE
: GL_FALSE
;
705 case GL_TEXTURE_GEN_T
:
707 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
708 return (texUnit
->TexGenEnabled
& T_BIT
) ? GL_TRUE
: GL_FALSE
;
714 case GL_VERTEX_ARRAY
:
715 return ctx
->Array
.Vertex
.Enabled
;
716 case GL_NORMAL_ARRAY
:
717 return ctx
->Array
.Normal
.Enabled
;
719 return ctx
->Array
.Color
.Enabled
;
721 return ctx
->Array
.Index
.Enabled
;
722 case GL_TEXTURE_COORD_ARRAY
:
723 return ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
;
724 case GL_EDGE_FLAG_ARRAY
:
725 return ctx
->Array
.EdgeFlag
.Enabled
;
727 /* GL_HP_occlusion_test */
728 case GL_OCCLUSION_TEST_HP
:
729 if (ctx
->Extensions
.HaveHpOcclusionTest
) {
730 return ctx
->Depth
.OcclusionTest
;
733 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
737 /* GL_SGIS_pixel_texture */
738 case GL_PIXEL_TEXTURE_SGIS
:
739 return ctx
->Pixel
.PixelTextureEnabled
;
741 /* GL_SGIX_pixel_texture */
742 case GL_PIXEL_TEX_GEN_SGIX
:
743 return ctx
->Pixel
.PixelTextureEnabled
;
745 /* GL_SGI_color_table */
746 case GL_COLOR_TABLE_SGI
:
747 return ctx
->Pixel
.ColorTableEnabled
;
748 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI
:
749 return ctx
->Pixel
.PostConvolutionColorTableEnabled
;
750 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI
:
751 return ctx
->Pixel
.PostColorMatrixColorTableEnabled
;
753 /* GL_EXT_convolution */
754 case GL_CONVOLUTION_1D
:
755 return ctx
->Pixel
.Convolution1DEnabled
;
756 case GL_CONVOLUTION_2D
:
757 return ctx
->Pixel
.Convolution2DEnabled
;
758 case GL_SEPARABLE_2D
:
759 return ctx
->Pixel
.Separable2DEnabled
;
761 /* GL_ARB_texture_cube_map */
762 case GL_TEXTURE_CUBE_MAP_ARB
:
764 if (ctx
->Visual
->RGBAflag
) {
765 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
766 const GLuint flag
= TEXTURE0_CUBE
<< (curr
* 4);
767 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
768 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
770 texUnit
->Enabled
|= TEXTURE0_2D
;
771 ctx
->Enabled
|= flag
;
774 texUnit
->Enabled
&= ~TEXTURE0_2D
;
775 ctx
->Enabled
&= ~flag
;
782 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
791 client_state( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
793 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
,
795 ? "glEnableClientState"
796 : "glDisableClientState") );
799 case GL_VERTEX_ARRAY
:
800 ctx
->Array
.Vertex
.Enabled
= state
;
802 case GL_NORMAL_ARRAY
:
803 ctx
->Array
.Normal
.Enabled
= state
;
806 ctx
->Array
.Color
.Enabled
= state
;
809 ctx
->Array
.Index
.Enabled
= state
;
811 case GL_TEXTURE_COORD_ARRAY
:
812 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
814 case GL_EDGE_FLAG_ARRAY
:
815 ctx
->Array
.EdgeFlag
.Enabled
= state
;
818 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable/DisableClientState" );
821 ctx
->NewState
|= NEW_CLIENT_STATE
;
827 _mesa_EnableClientState( GLenum cap
)
829 GET_CURRENT_CONTEXT(ctx
);
830 client_state( ctx
, cap
, GL_TRUE
);
836 _mesa_DisableClientState( GLenum cap
)
838 GET_CURRENT_CONTEXT(ctx
);
839 client_state( ctx
, cap
, GL_FALSE
);