1 /* $Id: enable.c,v 1.24 2000/09/26 20:53:53 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 _mesa_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 if (ctx
->Extensions
.HaveHistogram
) {
159 ctx
->Pixel
.HistogramEnabled
= state
;
162 gl_error( ctx
, GL_INVALID_ENUM
, state
? "glEnable": "glDisable" );
174 if (ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
!= state
) {
175 ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
= state
;
178 insert_at_tail(&ctx
->Light
.EnabledList
,
179 &ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
180 if (ctx
->Light
.Enabled
)
181 ctx
->Enabled
|= ENABLE_LIGHT
;
183 remove_from_list(&ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
184 if (is_empty_list(&ctx
->Light
.EnabledList
))
185 ctx
->Enabled
&= ~ENABLE_LIGHT
;
188 ctx
->NewState
|= NEW_LIGHTING
;
192 if (ctx
->Light
.Enabled
!=state
) {
193 ctx
->Light
.Enabled
= state
;
194 ctx
->Enabled
&= ~ENABLE_LIGHT
;
196 ctx
->Enabled
|= ENABLE_LIGHT
;
197 ctx
->NewState
|= NEW_LIGHTING
;
201 if (ctx
->Line
.SmoothFlag
!=state
) {
202 ctx
->Line
.SmoothFlag
= state
;
203 ctx
->TriangleCaps
^= DD_LINE_SMOOTH
;
204 ctx
->NewState
|= NEW_RASTER_OPS
;
207 case GL_LINE_STIPPLE
:
208 if (ctx
->Line
.StippleFlag
!=state
) {
209 ctx
->Line
.StippleFlag
= state
;
210 ctx
->TriangleCaps
^= DD_LINE_STIPPLE
;
211 ctx
->NewState
|= NEW_RASTER_OPS
;
214 case GL_INDEX_LOGIC_OP
:
215 if (ctx
->Color
.IndexLogicOpEnabled
!=state
) {
216 ctx
->Color
.IndexLogicOpEnabled
= state
;
217 ctx
->NewState
|= NEW_RASTER_OPS
;
220 case GL_COLOR_LOGIC_OP
:
221 if (ctx
->Color
.ColorLogicOpEnabled
!=state
) {
222 ctx
->Color
.ColorLogicOpEnabled
= state
;
223 ctx
->NewState
|= NEW_RASTER_OPS
;
226 case GL_MAP1_COLOR_4
:
227 ctx
->Eval
.Map1Color4
= state
;
230 ctx
->Eval
.Map1Index
= state
;
233 ctx
->Eval
.Map1Normal
= state
;
235 case GL_MAP1_TEXTURE_COORD_1
:
236 ctx
->Eval
.Map1TextureCoord1
= state
;
238 case GL_MAP1_TEXTURE_COORD_2
:
239 ctx
->Eval
.Map1TextureCoord2
= state
;
241 case GL_MAP1_TEXTURE_COORD_3
:
242 ctx
->Eval
.Map1TextureCoord3
= state
;
244 case GL_MAP1_TEXTURE_COORD_4
:
245 ctx
->Eval
.Map1TextureCoord4
= state
;
247 case GL_MAP1_VERTEX_3
:
248 ctx
->Eval
.Map1Vertex3
= state
;
250 case GL_MAP1_VERTEX_4
:
251 ctx
->Eval
.Map1Vertex4
= state
;
253 case GL_MAP2_COLOR_4
:
254 ctx
->Eval
.Map2Color4
= state
;
257 ctx
->Eval
.Map2Index
= state
;
260 ctx
->Eval
.Map2Normal
= state
;
262 case GL_MAP2_TEXTURE_COORD_1
:
263 ctx
->Eval
.Map2TextureCoord1
= state
;
265 case GL_MAP2_TEXTURE_COORD_2
:
266 ctx
->Eval
.Map2TextureCoord2
= state
;
268 case GL_MAP2_TEXTURE_COORD_3
:
269 ctx
->Eval
.Map2TextureCoord3
= state
;
271 case GL_MAP2_TEXTURE_COORD_4
:
272 ctx
->Eval
.Map2TextureCoord4
= state
;
274 case GL_MAP2_VERTEX_3
:
275 ctx
->Eval
.Map2Vertex3
= state
;
277 case GL_MAP2_VERTEX_4
:
278 ctx
->Eval
.Map2Vertex4
= state
;
281 ctx
->Pixel
.MinMaxEnabled
= state
;
284 if (ctx
->Transform
.Normalize
!= state
) {
285 ctx
->Transform
.Normalize
= state
;
286 ctx
->NewState
|= NEW_NORMAL_TRANSFORM
|NEW_LIGHTING
;
287 ctx
->Enabled
^= ENABLE_NORMALIZE
;
290 case GL_POINT_SMOOTH
:
291 if (ctx
->Point
.SmoothFlag
!=state
) {
292 ctx
->Point
.SmoothFlag
= state
;
293 ctx
->NewState
|= NEW_RASTER_OPS
;
296 case GL_POLYGON_SMOOTH
:
297 if (ctx
->Polygon
.SmoothFlag
!=state
) {
298 ctx
->Polygon
.SmoothFlag
= state
;
299 ctx
->NewState
|= NEW_RASTER_OPS
;
302 case GL_POLYGON_STIPPLE
:
303 if (ctx
->Polygon
.StippleFlag
!=state
) {
304 ctx
->Polygon
.StippleFlag
= state
;
305 ctx
->TriangleCaps
^= DD_TRI_STIPPLE
;
306 ctx
->NewState
|= NEW_RASTER_OPS
;
309 case GL_POLYGON_OFFSET_POINT
:
310 if (ctx
->Polygon
.OffsetPoint
!=state
) {
311 ctx
->Polygon
.OffsetPoint
= state
;
312 ctx
->NewState
|= NEW_POLYGON
;
315 case GL_POLYGON_OFFSET_LINE
:
316 if (ctx
->Polygon
.OffsetLine
!=state
) {
317 ctx
->Polygon
.OffsetLine
= state
;
318 ctx
->NewState
|= NEW_POLYGON
;
321 case GL_POLYGON_OFFSET_FILL
:
322 /*case GL_POLYGON_OFFSET_EXT:*/
323 if (ctx
->Polygon
.OffsetFill
!=state
) {
324 ctx
->Polygon
.OffsetFill
= state
;
325 ctx
->NewState
|= NEW_POLYGON
;
328 case GL_RESCALE_NORMAL_EXT
:
329 if (ctx
->Transform
.RescaleNormals
!= state
) {
330 ctx
->Transform
.RescaleNormals
= state
;
331 ctx
->NewState
|= NEW_NORMAL_TRANSFORM
|NEW_LIGHTING
;
332 ctx
->Enabled
^= ENABLE_RESCALE
;
335 case GL_SCISSOR_TEST
:
336 if (ctx
->Scissor
.Enabled
!=state
) {
337 ctx
->Scissor
.Enabled
= state
;
338 ctx
->NewState
|= NEW_RASTER_OPS
;
341 case GL_SHARED_TEXTURE_PALETTE_EXT
:
342 ctx
->Texture
.SharedPalette
= state
;
344 case GL_STENCIL_TEST
:
345 if (state
&& ctx
->Visual
.StencilBits
==0) {
346 _mesa_warning(ctx
, "glEnable(GL_STENCIL_TEST) but no stencil buffer");
349 if (ctx
->Stencil
.Enabled
!=state
) {
350 ctx
->Stencil
.Enabled
= state
;
351 ctx
->NewState
|= NEW_RASTER_OPS
;
352 ctx
->TriangleCaps
^= DD_STENCIL
;
356 if (ctx
->Visual
.RGBAflag
) {
357 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
358 const GLuint flag
= TEXTURE0_1D
<< (curr
* 4);
359 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
360 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
362 texUnit
->Enabled
|= TEXTURE0_1D
;
363 ctx
->Enabled
|= flag
;
366 texUnit
->Enabled
&= ~TEXTURE0_1D
;
367 ctx
->Enabled
&= ~flag
;
372 if (ctx
->Visual
.RGBAflag
) {
373 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
374 const GLuint flag
= TEXTURE0_2D
<< (curr
* 4);
375 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
376 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
378 texUnit
->Enabled
|= TEXTURE0_2D
;
379 ctx
->Enabled
|= flag
;
382 texUnit
->Enabled
&= ~TEXTURE0_2D
;
383 ctx
->Enabled
&= ~flag
;
388 if (ctx
->Visual
.RGBAflag
) {
389 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
390 const GLuint flag
= TEXTURE0_3D
<< (curr
* 4);
391 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
392 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
394 texUnit
->Enabled
|= TEXTURE0_3D
;
395 ctx
->Enabled
|= flag
;
398 texUnit
->Enabled
&= ~TEXTURE0_3D
;
399 ctx
->Enabled
&= ~flag
;
403 case GL_TEXTURE_GEN_Q
:
405 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
407 texUnit
->TexGenEnabled
|= Q_BIT
;
409 texUnit
->TexGenEnabled
&= ~Q_BIT
;
410 ctx
->NewState
|= NEW_TEXTURING
;
413 case GL_TEXTURE_GEN_R
:
415 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
417 texUnit
->TexGenEnabled
|= R_BIT
;
419 texUnit
->TexGenEnabled
&= ~R_BIT
;
420 ctx
->NewState
|= NEW_TEXTURING
;
423 case GL_TEXTURE_GEN_S
:
425 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
427 texUnit
->TexGenEnabled
|= S_BIT
;
429 texUnit
->TexGenEnabled
&= ~S_BIT
;
430 ctx
->NewState
|= NEW_TEXTURING
;
433 case GL_TEXTURE_GEN_T
:
435 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
437 texUnit
->TexGenEnabled
|= T_BIT
;
439 texUnit
->TexGenEnabled
&= ~T_BIT
;
440 ctx
->NewState
|= NEW_TEXTURING
;
447 case GL_VERTEX_ARRAY
:
448 ctx
->Array
.Vertex
.Enabled
= state
;
450 case GL_NORMAL_ARRAY
:
451 ctx
->Array
.Normal
.Enabled
= state
;
454 ctx
->Array
.Color
.Enabled
= state
;
457 ctx
->Array
.Index
.Enabled
= state
;
459 case GL_TEXTURE_COORD_ARRAY
:
460 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
462 case GL_EDGE_FLAG_ARRAY
:
463 ctx
->Array
.EdgeFlag
.Enabled
= state
;
466 /* GL_HP_occlusion_test */
467 case GL_OCCLUSION_TEST_HP
:
468 if (ctx
->Extensions
.HaveHpOcclusionTest
) {
469 ctx
->Depth
.OcclusionTest
= state
;
471 ctx
->OcclusionResult
= ctx
->OcclusionResultSaved
;
473 ctx
->OcclusionResultSaved
= ctx
->OcclusionResult
;
474 ctx
->NewState
|= NEW_RASTER_OPS
;
477 gl_error( ctx
, GL_INVALID_ENUM
, state
? "glEnable": "glDisable" );
482 /* GL_SGIS_pixel_texture */
483 case GL_PIXEL_TEXTURE_SGIS
:
484 /* XXX check for extension */
485 ctx
->Pixel
.PixelTextureEnabled
= state
;
488 /* GL_SGIX_pixel_texture */
489 case GL_PIXEL_TEX_GEN_SGIX
:
490 /* XXX check for extension */
491 ctx
->Pixel
.PixelTextureEnabled
= state
;
494 /* GL_SGI_color_table */
495 case GL_COLOR_TABLE_SGI
:
496 /* XXX check for extension */
497 ctx
->Pixel
.ColorTableEnabled
= state
;
498 ctx
->ImageTransferState
= UPDATE_IMAGE_TRANSFER_STATE
;
500 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI
:
501 ctx
->Pixel
.PostConvolutionColorTableEnabled
= state
;
502 ctx
->ImageTransferState
= UPDATE_IMAGE_TRANSFER_STATE
;
504 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI
:
505 ctx
->Pixel
.PostColorMatrixColorTableEnabled
= state
;
506 ctx
->ImageTransferState
= UPDATE_IMAGE_TRANSFER_STATE
;
509 /* GL_EXT_convolution */
510 case GL_CONVOLUTION_1D
:
511 /* XXX check for extension */
512 ctx
->Pixel
.Convolution1DEnabled
= state
;
513 ctx
->ImageTransferState
= UPDATE_IMAGE_TRANSFER_STATE
;
515 case GL_CONVOLUTION_2D
:
516 ctx
->Pixel
.Convolution2DEnabled
= state
;
517 ctx
->ImageTransferState
= UPDATE_IMAGE_TRANSFER_STATE
;
519 case GL_SEPARABLE_2D
:
520 ctx
->Pixel
.Separable2DEnabled
= state
;
521 ctx
->ImageTransferState
= UPDATE_IMAGE_TRANSFER_STATE
;
524 /* GL_ARB_texture_cube_map */
525 case GL_TEXTURE_CUBE_MAP_ARB
:
526 if (ctx
->Extensions
.HaveTextureCubeMap
) {
527 if (ctx
->Visual
.RGBAflag
) {
528 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
529 const GLuint flag
= TEXTURE0_CUBE
<< (curr
* 4);
530 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
531 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
533 texUnit
->Enabled
|= TEXTURE0_CUBE
;
534 ctx
->Enabled
|= flag
;
537 texUnit
->Enabled
&= ~TEXTURE0_CUBE
;
538 ctx
->Enabled
&= ~flag
;
544 gl_error(ctx
, GL_INVALID_ENUM
, "glEnable");
546 gl_error(ctx
, GL_INVALID_ENUM
, "glDisable");
553 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable" );
556 gl_error( ctx
, GL_INVALID_ENUM
, "glDisable" );
561 if (ctx
->Driver
.Enable
) {
562 (*ctx
->Driver
.Enable
)( ctx
, cap
, state
);
570 _mesa_Enable( GLenum cap
)
572 GET_CURRENT_CONTEXT(ctx
);
573 _mesa_set_enable( ctx
, cap
, GL_TRUE
);
579 _mesa_Disable( GLenum cap
)
581 GET_CURRENT_CONTEXT(ctx
);
582 _mesa_set_enable( ctx
, cap
, GL_FALSE
);
588 _mesa_IsEnabled( GLenum cap
)
590 GET_CURRENT_CONTEXT(ctx
);
593 return ctx
->Color
.AlphaEnabled
;
595 return ctx
->Eval
.AutoNormal
;
597 return ctx
->Color
.BlendEnabled
;
604 return ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
];
605 case GL_COLOR_MATERIAL
:
606 return ctx
->Light
.ColorMaterialEnabled
;
608 return ctx
->Polygon
.CullFlag
;
610 return ctx
->Depth
.Test
;
612 return ctx
->Color
.DitherFlag
;
614 return ctx
->Fog
.Enabled
;
616 if (ctx
->Extensions
.HaveHistogram
) {
617 return ctx
->Pixel
.HistogramEnabled
;
620 gl_error(ctx
, GL_INVALID_ENUM
, "glIsEnabled");
624 return ctx
->Light
.Enabled
;
633 return ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
;
635 return ctx
->Line
.SmoothFlag
;
636 case GL_LINE_STIPPLE
:
637 return ctx
->Line
.StippleFlag
;
638 case GL_INDEX_LOGIC_OP
:
639 return ctx
->Color
.IndexLogicOpEnabled
;
640 case GL_COLOR_LOGIC_OP
:
641 return ctx
->Color
.ColorLogicOpEnabled
;
642 case GL_MAP1_COLOR_4
:
643 return ctx
->Eval
.Map1Color4
;
645 return ctx
->Eval
.Map1Index
;
647 return ctx
->Eval
.Map1Normal
;
648 case GL_MAP1_TEXTURE_COORD_1
:
649 return ctx
->Eval
.Map1TextureCoord1
;
650 case GL_MAP1_TEXTURE_COORD_2
:
651 return ctx
->Eval
.Map1TextureCoord2
;
652 case GL_MAP1_TEXTURE_COORD_3
:
653 return ctx
->Eval
.Map1TextureCoord3
;
654 case GL_MAP1_TEXTURE_COORD_4
:
655 return ctx
->Eval
.Map1TextureCoord4
;
656 case GL_MAP1_VERTEX_3
:
657 return ctx
->Eval
.Map1Vertex3
;
658 case GL_MAP1_VERTEX_4
:
659 return ctx
->Eval
.Map1Vertex4
;
660 case GL_MAP2_COLOR_4
:
661 return ctx
->Eval
.Map2Color4
;
663 return ctx
->Eval
.Map2Index
;
665 return ctx
->Eval
.Map2Normal
;
666 case GL_MAP2_TEXTURE_COORD_1
:
667 return ctx
->Eval
.Map2TextureCoord1
;
668 case GL_MAP2_TEXTURE_COORD_2
:
669 return ctx
->Eval
.Map2TextureCoord2
;
670 case GL_MAP2_TEXTURE_COORD_3
:
671 return ctx
->Eval
.Map2TextureCoord3
;
672 case GL_MAP2_TEXTURE_COORD_4
:
673 return ctx
->Eval
.Map2TextureCoord4
;
674 case GL_MAP2_VERTEX_3
:
675 return ctx
->Eval
.Map2Vertex3
;
676 case GL_MAP2_VERTEX_4
:
677 return ctx
->Eval
.Map2Vertex4
;
679 return ctx
->Pixel
.MinMaxEnabled
;
681 return ctx
->Transform
.Normalize
;
682 case GL_POINT_SMOOTH
:
683 return ctx
->Point
.SmoothFlag
;
684 case GL_POLYGON_SMOOTH
:
685 return ctx
->Polygon
.SmoothFlag
;
686 case GL_POLYGON_STIPPLE
:
687 return ctx
->Polygon
.StippleFlag
;
688 case GL_POLYGON_OFFSET_POINT
:
689 return ctx
->Polygon
.OffsetPoint
;
690 case GL_POLYGON_OFFSET_LINE
:
691 return ctx
->Polygon
.OffsetLine
;
692 case GL_POLYGON_OFFSET_FILL
:
693 /*case GL_POLYGON_OFFSET_EXT:*/
694 return ctx
->Polygon
.OffsetFill
;
695 case GL_RESCALE_NORMAL_EXT
:
696 return ctx
->Transform
.RescaleNormals
;
697 case GL_SCISSOR_TEST
:
698 return ctx
->Scissor
.Enabled
;
699 case GL_SHARED_TEXTURE_PALETTE_EXT
:
700 return ctx
->Texture
.SharedPalette
;
701 case GL_STENCIL_TEST
:
702 return ctx
->Stencil
.Enabled
;
705 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
706 return (texUnit
->Enabled
& TEXTURE0_1D
) ? GL_TRUE
: GL_FALSE
;
710 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
711 return (texUnit
->Enabled
& TEXTURE0_2D
) ? GL_TRUE
: GL_FALSE
;
715 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
716 return (texUnit
->Enabled
& TEXTURE0_3D
) ? GL_TRUE
: GL_FALSE
;
718 case GL_TEXTURE_GEN_Q
:
720 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
721 return (texUnit
->TexGenEnabled
& Q_BIT
) ? GL_TRUE
: GL_FALSE
;
723 case GL_TEXTURE_GEN_R
:
725 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
726 return (texUnit
->TexGenEnabled
& R_BIT
) ? GL_TRUE
: GL_FALSE
;
728 case GL_TEXTURE_GEN_S
:
730 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
731 return (texUnit
->TexGenEnabled
& S_BIT
) ? GL_TRUE
: GL_FALSE
;
733 case GL_TEXTURE_GEN_T
:
735 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
736 return (texUnit
->TexGenEnabled
& T_BIT
) ? GL_TRUE
: GL_FALSE
;
742 case GL_VERTEX_ARRAY
:
743 return ctx
->Array
.Vertex
.Enabled
;
744 case GL_NORMAL_ARRAY
:
745 return ctx
->Array
.Normal
.Enabled
;
747 return ctx
->Array
.Color
.Enabled
;
749 return ctx
->Array
.Index
.Enabled
;
750 case GL_TEXTURE_COORD_ARRAY
:
751 return ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
;
752 case GL_EDGE_FLAG_ARRAY
:
753 return ctx
->Array
.EdgeFlag
.Enabled
;
755 /* GL_HP_occlusion_test */
756 case GL_OCCLUSION_TEST_HP
:
757 if (ctx
->Extensions
.HaveHpOcclusionTest
) {
758 return ctx
->Depth
.OcclusionTest
;
761 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
765 /* GL_SGIS_pixel_texture */
766 case GL_PIXEL_TEXTURE_SGIS
:
767 return ctx
->Pixel
.PixelTextureEnabled
;
769 /* GL_SGIX_pixel_texture */
770 case GL_PIXEL_TEX_GEN_SGIX
:
771 return ctx
->Pixel
.PixelTextureEnabled
;
773 /* GL_SGI_color_table */
774 case GL_COLOR_TABLE_SGI
:
775 return ctx
->Pixel
.ColorTableEnabled
;
776 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI
:
777 return ctx
->Pixel
.PostConvolutionColorTableEnabled
;
778 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI
:
779 return ctx
->Pixel
.PostColorMatrixColorTableEnabled
;
781 /* GL_EXT_convolution */
782 case GL_CONVOLUTION_1D
:
783 return ctx
->Pixel
.Convolution1DEnabled
;
784 case GL_CONVOLUTION_2D
:
785 return ctx
->Pixel
.Convolution2DEnabled
;
786 case GL_SEPARABLE_2D
:
787 return ctx
->Pixel
.Separable2DEnabled
;
789 /* GL_ARB_texture_cube_map */
790 case GL_TEXTURE_CUBE_MAP_ARB
:
791 if (ctx
->Extensions
.HaveTextureCubeMap
) {
792 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
793 return (texUnit
->Enabled
& TEXTURE0_CUBE
) ? GL_TRUE
: GL_FALSE
;
796 gl_error(ctx
, GL_INVALID_ENUM
, "glIsEnabled");
801 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
810 client_state( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
812 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
,
814 ? "glEnableClientState"
815 : "glDisableClientState") );
818 case GL_VERTEX_ARRAY
:
819 ctx
->Array
.Vertex
.Enabled
= state
;
821 case GL_NORMAL_ARRAY
:
822 ctx
->Array
.Normal
.Enabled
= state
;
825 ctx
->Array
.Color
.Enabled
= state
;
828 ctx
->Array
.Index
.Enabled
= state
;
830 case GL_TEXTURE_COORD_ARRAY
:
831 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
833 case GL_EDGE_FLAG_ARRAY
:
834 ctx
->Array
.EdgeFlag
.Enabled
= state
;
837 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable/DisableClientState" );
840 ctx
->NewState
|= NEW_CLIENT_STATE
;
846 _mesa_EnableClientState( GLenum cap
)
848 GET_CURRENT_CONTEXT(ctx
);
849 client_state( ctx
, cap
, GL_TRUE
);
855 _mesa_DisableClientState( GLenum cap
)
857 GET_CURRENT_CONTEXT(ctx
);
858 client_state( ctx
, cap
, GL_FALSE
);