1 /* $Id: enable.c,v 1.21 2000/05/23 15:17:12 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
:
511 if (ctx
->Extensions
.HaveTextureCubeMap
) {
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_CUBE
;
519 ctx
->Enabled
|= flag
;
522 texUnit
->Enabled
&= ~TEXTURE0_CUBE
;
523 ctx
->Enabled
&= ~flag
;
529 gl_error(ctx
, GL_INVALID_ENUM
, "glEnable");
531 gl_error(ctx
, GL_INVALID_ENUM
, "glDisable");
538 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable" );
541 gl_error( ctx
, GL_INVALID_ENUM
, "glDisable" );
546 if (ctx
->Driver
.Enable
) {
547 (*ctx
->Driver
.Enable
)( ctx
, cap
, state
);
555 _mesa_Enable( GLenum cap
)
557 GET_CURRENT_CONTEXT(ctx
);
558 _mesa_set_enable( ctx
, cap
, GL_TRUE
);
564 _mesa_Disable( GLenum cap
)
566 GET_CURRENT_CONTEXT(ctx
);
567 _mesa_set_enable( ctx
, cap
, GL_FALSE
);
573 _mesa_IsEnabled( GLenum cap
)
575 GET_CURRENT_CONTEXT(ctx
);
578 return ctx
->Color
.AlphaEnabled
;
580 return ctx
->Eval
.AutoNormal
;
582 return ctx
->Color
.BlendEnabled
;
589 return ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
];
590 case GL_COLOR_MATERIAL
:
591 return ctx
->Light
.ColorMaterialEnabled
;
593 return ctx
->Polygon
.CullFlag
;
595 return ctx
->Depth
.Test
;
597 return ctx
->Color
.DitherFlag
;
599 return ctx
->Fog
.Enabled
;
601 return ctx
->Pixel
.HistogramEnabled
;
603 return ctx
->Light
.Enabled
;
612 return ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
;
614 return ctx
->Line
.SmoothFlag
;
615 case GL_LINE_STIPPLE
:
616 return ctx
->Line
.StippleFlag
;
617 case GL_INDEX_LOGIC_OP
:
618 return ctx
->Color
.IndexLogicOpEnabled
;
619 case GL_COLOR_LOGIC_OP
:
620 return ctx
->Color
.ColorLogicOpEnabled
;
621 case GL_MAP1_COLOR_4
:
622 return ctx
->Eval
.Map1Color4
;
624 return ctx
->Eval
.Map1Index
;
626 return ctx
->Eval
.Map1Normal
;
627 case GL_MAP1_TEXTURE_COORD_1
:
628 return ctx
->Eval
.Map1TextureCoord1
;
629 case GL_MAP1_TEXTURE_COORD_2
:
630 return ctx
->Eval
.Map1TextureCoord2
;
631 case GL_MAP1_TEXTURE_COORD_3
:
632 return ctx
->Eval
.Map1TextureCoord3
;
633 case GL_MAP1_TEXTURE_COORD_4
:
634 return ctx
->Eval
.Map1TextureCoord4
;
635 case GL_MAP1_VERTEX_3
:
636 return ctx
->Eval
.Map1Vertex3
;
637 case GL_MAP1_VERTEX_4
:
638 return ctx
->Eval
.Map1Vertex4
;
639 case GL_MAP2_COLOR_4
:
640 return ctx
->Eval
.Map2Color4
;
642 return ctx
->Eval
.Map2Index
;
644 return ctx
->Eval
.Map2Normal
;
645 case GL_MAP2_TEXTURE_COORD_1
:
646 return ctx
->Eval
.Map2TextureCoord1
;
647 case GL_MAP2_TEXTURE_COORD_2
:
648 return ctx
->Eval
.Map2TextureCoord2
;
649 case GL_MAP2_TEXTURE_COORD_3
:
650 return ctx
->Eval
.Map2TextureCoord3
;
651 case GL_MAP2_TEXTURE_COORD_4
:
652 return ctx
->Eval
.Map2TextureCoord4
;
653 case GL_MAP2_VERTEX_3
:
654 return ctx
->Eval
.Map2Vertex3
;
655 case GL_MAP2_VERTEX_4
:
656 return ctx
->Eval
.Map2Vertex4
;
658 return ctx
->Pixel
.MinMaxEnabled
;
660 return ctx
->Transform
.Normalize
;
661 case GL_POINT_SMOOTH
:
662 return ctx
->Point
.SmoothFlag
;
663 case GL_POLYGON_SMOOTH
:
664 return ctx
->Polygon
.SmoothFlag
;
665 case GL_POLYGON_STIPPLE
:
666 return ctx
->Polygon
.StippleFlag
;
667 case GL_POLYGON_OFFSET_POINT
:
668 return ctx
->Polygon
.OffsetPoint
;
669 case GL_POLYGON_OFFSET_LINE
:
670 return ctx
->Polygon
.OffsetLine
;
671 case GL_POLYGON_OFFSET_FILL
:
672 /*case GL_POLYGON_OFFSET_EXT:*/
673 return ctx
->Polygon
.OffsetFill
;
674 case GL_RESCALE_NORMAL_EXT
:
675 return ctx
->Transform
.RescaleNormals
;
676 case GL_SCISSOR_TEST
:
677 return ctx
->Scissor
.Enabled
;
678 case GL_SHARED_TEXTURE_PALETTE_EXT
:
679 return ctx
->Texture
.SharedPalette
;
680 case GL_STENCIL_TEST
:
681 return ctx
->Stencil
.Enabled
;
684 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
685 return (texUnit
->Enabled
& TEXTURE0_1D
) ? GL_TRUE
: GL_FALSE
;
689 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
690 return (texUnit
->Enabled
& TEXTURE0_2D
) ? GL_TRUE
: GL_FALSE
;
694 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
695 return (texUnit
->Enabled
& TEXTURE0_3D
) ? GL_TRUE
: GL_FALSE
;
697 case GL_TEXTURE_GEN_Q
:
699 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
700 return (texUnit
->TexGenEnabled
& Q_BIT
) ? GL_TRUE
: GL_FALSE
;
702 case GL_TEXTURE_GEN_R
:
704 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
705 return (texUnit
->TexGenEnabled
& R_BIT
) ? GL_TRUE
: GL_FALSE
;
707 case GL_TEXTURE_GEN_S
:
709 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
710 return (texUnit
->TexGenEnabled
& S_BIT
) ? GL_TRUE
: GL_FALSE
;
712 case GL_TEXTURE_GEN_T
:
714 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
715 return (texUnit
->TexGenEnabled
& T_BIT
) ? GL_TRUE
: GL_FALSE
;
721 case GL_VERTEX_ARRAY
:
722 return ctx
->Array
.Vertex
.Enabled
;
723 case GL_NORMAL_ARRAY
:
724 return ctx
->Array
.Normal
.Enabled
;
726 return ctx
->Array
.Color
.Enabled
;
728 return ctx
->Array
.Index
.Enabled
;
729 case GL_TEXTURE_COORD_ARRAY
:
730 return ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
;
731 case GL_EDGE_FLAG_ARRAY
:
732 return ctx
->Array
.EdgeFlag
.Enabled
;
734 /* GL_HP_occlusion_test */
735 case GL_OCCLUSION_TEST_HP
:
736 if (ctx
->Extensions
.HaveHpOcclusionTest
) {
737 return ctx
->Depth
.OcclusionTest
;
740 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
744 /* GL_SGIS_pixel_texture */
745 case GL_PIXEL_TEXTURE_SGIS
:
746 return ctx
->Pixel
.PixelTextureEnabled
;
748 /* GL_SGIX_pixel_texture */
749 case GL_PIXEL_TEX_GEN_SGIX
:
750 return ctx
->Pixel
.PixelTextureEnabled
;
752 /* GL_SGI_color_table */
753 case GL_COLOR_TABLE_SGI
:
754 return ctx
->Pixel
.ColorTableEnabled
;
755 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI
:
756 return ctx
->Pixel
.PostConvolutionColorTableEnabled
;
757 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI
:
758 return ctx
->Pixel
.PostColorMatrixColorTableEnabled
;
760 /* GL_EXT_convolution */
761 case GL_CONVOLUTION_1D
:
762 return ctx
->Pixel
.Convolution1DEnabled
;
763 case GL_CONVOLUTION_2D
:
764 return ctx
->Pixel
.Convolution2DEnabled
;
765 case GL_SEPARABLE_2D
:
766 return ctx
->Pixel
.Separable2DEnabled
;
768 /* GL_ARB_texture_cube_map */
769 case GL_TEXTURE_CUBE_MAP_ARB
:
770 if (ctx
->Extensions
.HaveTextureCubeMap
) {
771 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
772 return (texUnit
->Enabled
& TEXTURE0_CUBE
) ? GL_TRUE
: GL_FALSE
;
775 gl_error(ctx
, GL_INVALID_ENUM
, "glIsEnabled");
780 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
789 client_state( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
791 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
,
793 ? "glEnableClientState"
794 : "glDisableClientState") );
797 case GL_VERTEX_ARRAY
:
798 ctx
->Array
.Vertex
.Enabled
= state
;
800 case GL_NORMAL_ARRAY
:
801 ctx
->Array
.Normal
.Enabled
= state
;
804 ctx
->Array
.Color
.Enabled
= state
;
807 ctx
->Array
.Index
.Enabled
= state
;
809 case GL_TEXTURE_COORD_ARRAY
:
810 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
812 case GL_EDGE_FLAG_ARRAY
:
813 ctx
->Array
.EdgeFlag
.Enabled
= state
;
816 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable/DisableClientState" );
819 ctx
->NewState
|= NEW_CLIENT_STATE
;
825 _mesa_EnableClientState( GLenum cap
)
827 GET_CURRENT_CONTEXT(ctx
);
828 client_state( ctx
, cap
, GL_TRUE
);
834 _mesa_DisableClientState( GLenum cap
)
836 GET_CURRENT_CONTEXT(ctx
);
837 client_state( ctx
, cap
, GL_FALSE
);