1 /* $Id: enable.c,v 1.10 1999/11/11 01:22:26 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
;
165 if (ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
!= state
)
167 ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
= state
;
170 insert_at_tail(&ctx
->Light
.EnabledList
,
171 &ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
172 if (ctx
->Light
.Enabled
)
173 ctx
->Enabled
|= ENABLE_LIGHT
;
175 remove_from_list(&ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
176 if (is_empty_list(&ctx
->Light
.EnabledList
))
177 ctx
->Enabled
&= ~ENABLE_LIGHT
;
180 ctx
->NewState
|= NEW_LIGHTING
;
184 if (ctx
->Light
.Enabled
!=state
) {
185 ctx
->Light
.Enabled
= state
;
186 ctx
->Enabled
&= ~ENABLE_LIGHT
;
188 ctx
->Enabled
|= ENABLE_LIGHT
;
189 ctx
->NewState
|= NEW_LIGHTING
;
193 if (ctx
->Line
.SmoothFlag
!=state
) {
194 ctx
->Line
.SmoothFlag
= state
;
195 ctx
->NewState
|= NEW_RASTER_OPS
;
198 case GL_LINE_STIPPLE
:
199 if (ctx
->Line
.StippleFlag
!=state
) {
200 ctx
->Line
.StippleFlag
= state
;
201 ctx
->TriangleCaps
^= DD_LINE_STIPPLE
;
202 ctx
->NewState
|= NEW_RASTER_OPS
;
205 case GL_INDEX_LOGIC_OP
:
206 if (ctx
->Color
.IndexLogicOpEnabled
!=state
) {
207 ctx
->Color
.IndexLogicOpEnabled
= state
;
208 ctx
->NewState
|= NEW_RASTER_OPS
;
211 case GL_COLOR_LOGIC_OP
:
212 if (ctx
->Color
.ColorLogicOpEnabled
!=state
) {
213 ctx
->Color
.ColorLogicOpEnabled
= state
;
214 ctx
->NewState
|= NEW_RASTER_OPS
;
217 case GL_MAP1_COLOR_4
:
218 ctx
->Eval
.Map1Color4
= state
;
221 ctx
->Eval
.Map1Index
= state
;
224 ctx
->Eval
.Map1Normal
= state
;
226 case GL_MAP1_TEXTURE_COORD_1
:
227 ctx
->Eval
.Map1TextureCoord1
= state
;
229 case GL_MAP1_TEXTURE_COORD_2
:
230 ctx
->Eval
.Map1TextureCoord2
= state
;
232 case GL_MAP1_TEXTURE_COORD_3
:
233 ctx
->Eval
.Map1TextureCoord3
= state
;
235 case GL_MAP1_TEXTURE_COORD_4
:
236 ctx
->Eval
.Map1TextureCoord4
= state
;
238 case GL_MAP1_VERTEX_3
:
239 ctx
->Eval
.Map1Vertex3
= state
;
241 case GL_MAP1_VERTEX_4
:
242 ctx
->Eval
.Map1Vertex4
= state
;
244 case GL_MAP2_COLOR_4
:
245 ctx
->Eval
.Map2Color4
= state
;
248 ctx
->Eval
.Map2Index
= state
;
251 ctx
->Eval
.Map2Normal
= state
;
253 case GL_MAP2_TEXTURE_COORD_1
:
254 ctx
->Eval
.Map2TextureCoord1
= state
;
256 case GL_MAP2_TEXTURE_COORD_2
:
257 ctx
->Eval
.Map2TextureCoord2
= state
;
259 case GL_MAP2_TEXTURE_COORD_3
:
260 ctx
->Eval
.Map2TextureCoord3
= state
;
262 case GL_MAP2_TEXTURE_COORD_4
:
263 ctx
->Eval
.Map2TextureCoord4
= state
;
265 case GL_MAP2_VERTEX_3
:
266 ctx
->Eval
.Map2Vertex3
= state
;
268 case GL_MAP2_VERTEX_4
:
269 ctx
->Eval
.Map2Vertex4
= state
;
272 if (ctx
->Transform
.Normalize
!= state
) {
273 ctx
->Transform
.Normalize
= state
;
274 ctx
->NewState
|= NEW_NORMAL_TRANSFORM
|NEW_LIGHTING
;
275 ctx
->Enabled
^= ENABLE_NORMALIZE
;
278 case GL_POINT_SMOOTH
:
279 if (ctx
->Point
.SmoothFlag
!=state
) {
280 ctx
->Point
.SmoothFlag
= state
;
281 ctx
->NewState
|= NEW_RASTER_OPS
;
284 case GL_POLYGON_SMOOTH
:
285 if (ctx
->Polygon
.SmoothFlag
!=state
) {
286 ctx
->Polygon
.SmoothFlag
= state
;
287 ctx
->NewState
|= NEW_RASTER_OPS
;
290 case GL_POLYGON_STIPPLE
:
291 if (ctx
->Polygon
.StippleFlag
!=state
) {
292 ctx
->Polygon
.StippleFlag
= state
;
293 ctx
->TriangleCaps
^= DD_TRI_STIPPLE
;
294 ctx
->NewState
|= NEW_RASTER_OPS
;
297 case GL_POLYGON_OFFSET_POINT
:
298 if (ctx
->Polygon
.OffsetPoint
!=state
) {
299 ctx
->Polygon
.OffsetPoint
= state
;
300 ctx
->NewState
|= NEW_POLYGON
;
303 case GL_POLYGON_OFFSET_LINE
:
304 if (ctx
->Polygon
.OffsetLine
!=state
) {
305 ctx
->Polygon
.OffsetLine
= state
;
306 ctx
->NewState
|= NEW_POLYGON
;
309 case GL_POLYGON_OFFSET_FILL
:
310 /*case GL_POLYGON_OFFSET_EXT:*/
311 if (ctx
->Polygon
.OffsetFill
!=state
) {
312 ctx
->Polygon
.OffsetFill
= state
;
313 ctx
->NewState
|= NEW_POLYGON
;
316 case GL_RESCALE_NORMAL_EXT
:
317 if (ctx
->Transform
.RescaleNormals
!= state
) {
318 ctx
->Transform
.RescaleNormals
= state
;
319 ctx
->NewState
|= NEW_NORMAL_TRANSFORM
|NEW_LIGHTING
;
320 ctx
->Enabled
^= ENABLE_RESCALE
;
323 case GL_SCISSOR_TEST
:
324 if (ctx
->Scissor
.Enabled
!=state
) {
325 ctx
->Scissor
.Enabled
= state
;
326 ctx
->NewState
|= NEW_RASTER_OPS
;
329 case GL_SHARED_TEXTURE_PALETTE_EXT
:
330 ctx
->Texture
.SharedPalette
= state
;
331 if (ctx
->Driver
.UseGlobalTexturePalette
)
332 (*ctx
->Driver
.UseGlobalTexturePalette
)( ctx
, state
);
334 case GL_STENCIL_TEST
:
335 if (state
&& ctx
->Visual
->StencilBits
==0) {
336 gl_warning(ctx
, "glEnable(GL_STENCIL_TEST) but no stencil buffer");
339 if (ctx
->Stencil
.Enabled
!=state
) {
340 ctx
->Stencil
.Enabled
= state
;
341 ctx
->NewState
|= NEW_RASTER_OPS
;
342 ctx
->TriangleCaps
^= DD_STENCIL
;
346 if (ctx
->Visual
->RGBAflag
) {
347 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
348 const GLuint flag
= TEXTURE0_1D
<< (curr
* 4);
349 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
350 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
352 texUnit
->Enabled
|= TEXTURE0_1D
;
353 ctx
->Enabled
|= flag
;
356 texUnit
->Enabled
&= ~TEXTURE0_1D
;
357 ctx
->Enabled
&= ~flag
;
362 if (ctx
->Visual
->RGBAflag
) {
363 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
364 const GLuint flag
= TEXTURE0_2D
<< (curr
* 4);
365 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
366 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
368 texUnit
->Enabled
|= TEXTURE0_2D
;
369 ctx
->Enabled
|= flag
;
372 texUnit
->Enabled
&= ~TEXTURE0_2D
;
373 ctx
->Enabled
&= ~flag
;
378 if (ctx
->Visual
->RGBAflag
) {
379 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
380 const GLuint flag
= TEXTURE0_3D
<< (curr
* 4);
381 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
382 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
384 texUnit
->Enabled
|= TEXTURE0_3D
;
385 ctx
->Enabled
|= flag
;
388 texUnit
->Enabled
&= ~TEXTURE0_3D
;
389 ctx
->Enabled
&= ~flag
;
393 case GL_TEXTURE_GEN_Q
:
395 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
397 texUnit
->TexGenEnabled
|= Q_BIT
;
399 texUnit
->TexGenEnabled
&= ~Q_BIT
;
400 ctx
->NewState
|= NEW_TEXTURING
;
403 case GL_TEXTURE_GEN_R
:
405 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
407 texUnit
->TexGenEnabled
|= R_BIT
;
409 texUnit
->TexGenEnabled
&= ~R_BIT
;
410 ctx
->NewState
|= NEW_TEXTURING
;
413 case GL_TEXTURE_GEN_S
:
415 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
417 texUnit
->TexGenEnabled
|= S_BIT
;
419 texUnit
->TexGenEnabled
&= ~S_BIT
;
420 ctx
->NewState
|= NEW_TEXTURING
;
423 case GL_TEXTURE_GEN_T
:
425 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
427 texUnit
->TexGenEnabled
|= T_BIT
;
429 texUnit
->TexGenEnabled
&= ~T_BIT
;
430 ctx
->NewState
|= NEW_TEXTURING
;
437 case GL_VERTEX_ARRAY
:
438 ctx
->Array
.Vertex
.Enabled
= state
;
440 case GL_NORMAL_ARRAY
:
441 ctx
->Array
.Normal
.Enabled
= state
;
444 ctx
->Array
.Color
.Enabled
= state
;
447 ctx
->Array
.Index
.Enabled
= state
;
449 case GL_TEXTURE_COORD_ARRAY
:
450 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
452 case GL_EDGE_FLAG_ARRAY
:
453 ctx
->Array
.EdgeFlag
.Enabled
= state
;
458 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable" );
461 gl_error( ctx
, GL_INVALID_ENUM
, "glDisable" );
466 if (ctx
->Driver
.Enable
) {
467 (*ctx
->Driver
.Enable
)( ctx
, cap
, state
);
475 _mesa_Enable( GLenum cap
)
477 GET_CURRENT_CONTEXT(ctx
);
478 _mesa_set_enable( ctx
, cap
, GL_TRUE
);
484 _mesa_Disable( GLenum cap
)
486 GET_CURRENT_CONTEXT(ctx
);
487 _mesa_set_enable( ctx
, cap
, GL_FALSE
);
493 _mesa_IsEnabled( GLenum cap
)
495 GET_CURRENT_CONTEXT(ctx
);
498 return ctx
->Color
.AlphaEnabled
;
500 return ctx
->Eval
.AutoNormal
;
502 return ctx
->Color
.BlendEnabled
;
509 return ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
];
510 case GL_COLOR_MATERIAL
:
511 return ctx
->Light
.ColorMaterialEnabled
;
513 return ctx
->Polygon
.CullFlag
;
515 return ctx
->Depth
.Test
;
517 return ctx
->Color
.DitherFlag
;
519 return ctx
->Fog
.Enabled
;
521 return ctx
->Light
.Enabled
;
530 return ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
;
532 return ctx
->Line
.SmoothFlag
;
533 case GL_LINE_STIPPLE
:
534 return ctx
->Line
.StippleFlag
;
535 case GL_INDEX_LOGIC_OP
:
536 return ctx
->Color
.IndexLogicOpEnabled
;
537 case GL_COLOR_LOGIC_OP
:
538 return ctx
->Color
.ColorLogicOpEnabled
;
539 case GL_MAP1_COLOR_4
:
540 return ctx
->Eval
.Map1Color4
;
542 return ctx
->Eval
.Map1Index
;
544 return ctx
->Eval
.Map1Normal
;
545 case GL_MAP1_TEXTURE_COORD_1
:
546 return ctx
->Eval
.Map1TextureCoord1
;
547 case GL_MAP1_TEXTURE_COORD_2
:
548 return ctx
->Eval
.Map1TextureCoord2
;
549 case GL_MAP1_TEXTURE_COORD_3
:
550 return ctx
->Eval
.Map1TextureCoord3
;
551 case GL_MAP1_TEXTURE_COORD_4
:
552 return ctx
->Eval
.Map1TextureCoord4
;
553 case GL_MAP1_VERTEX_3
:
554 return ctx
->Eval
.Map1Vertex3
;
555 case GL_MAP1_VERTEX_4
:
556 return ctx
->Eval
.Map1Vertex4
;
557 case GL_MAP2_COLOR_4
:
558 return ctx
->Eval
.Map2Color4
;
560 return ctx
->Eval
.Map2Index
;
562 return ctx
->Eval
.Map2Normal
;
563 case GL_MAP2_TEXTURE_COORD_1
:
564 return ctx
->Eval
.Map2TextureCoord1
;
565 case GL_MAP2_TEXTURE_COORD_2
:
566 return ctx
->Eval
.Map2TextureCoord2
;
567 case GL_MAP2_TEXTURE_COORD_3
:
568 return ctx
->Eval
.Map2TextureCoord3
;
569 case GL_MAP2_TEXTURE_COORD_4
:
570 return ctx
->Eval
.Map2TextureCoord4
;
571 case GL_MAP2_VERTEX_3
:
572 return ctx
->Eval
.Map2Vertex3
;
573 case GL_MAP2_VERTEX_4
:
574 return ctx
->Eval
.Map2Vertex4
;
576 return ctx
->Transform
.Normalize
;
577 case GL_POINT_SMOOTH
:
578 return ctx
->Point
.SmoothFlag
;
579 case GL_POLYGON_SMOOTH
:
580 return ctx
->Polygon
.SmoothFlag
;
581 case GL_POLYGON_STIPPLE
:
582 return ctx
->Polygon
.StippleFlag
;
583 case GL_POLYGON_OFFSET_POINT
:
584 return ctx
->Polygon
.OffsetPoint
;
585 case GL_POLYGON_OFFSET_LINE
:
586 return ctx
->Polygon
.OffsetLine
;
587 case GL_POLYGON_OFFSET_FILL
:
588 /*case GL_POLYGON_OFFSET_EXT:*/
589 return ctx
->Polygon
.OffsetFill
;
590 case GL_RESCALE_NORMAL_EXT
:
591 return ctx
->Transform
.RescaleNormals
;
592 case GL_SCISSOR_TEST
:
593 return ctx
->Scissor
.Enabled
;
594 case GL_SHARED_TEXTURE_PALETTE_EXT
:
595 return ctx
->Texture
.SharedPalette
;
596 case GL_STENCIL_TEST
:
597 return ctx
->Stencil
.Enabled
;
600 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
601 return (texUnit
->Enabled
& TEXTURE0_1D
) ? GL_TRUE
: GL_FALSE
;
605 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
606 return (texUnit
->Enabled
& TEXTURE0_2D
) ? GL_TRUE
: GL_FALSE
;
610 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
611 return (texUnit
->Enabled
& TEXTURE0_3D
) ? GL_TRUE
: GL_FALSE
;
613 case GL_TEXTURE_GEN_Q
:
615 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
616 return (texUnit
->TexGenEnabled
& Q_BIT
) ? GL_TRUE
: GL_FALSE
;
618 case GL_TEXTURE_GEN_R
:
620 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
621 return (texUnit
->TexGenEnabled
& R_BIT
) ? GL_TRUE
: GL_FALSE
;
623 case GL_TEXTURE_GEN_S
:
625 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
626 return (texUnit
->TexGenEnabled
& S_BIT
) ? GL_TRUE
: GL_FALSE
;
628 case GL_TEXTURE_GEN_T
:
630 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
631 return (texUnit
->TexGenEnabled
& T_BIT
) ? GL_TRUE
: GL_FALSE
;
637 case GL_VERTEX_ARRAY
:
638 return ctx
->Array
.Vertex
.Enabled
;
639 case GL_NORMAL_ARRAY
:
640 return ctx
->Array
.Normal
.Enabled
;
642 return ctx
->Array
.Color
.Enabled
;
644 return ctx
->Array
.Index
.Enabled
;
645 case GL_TEXTURE_COORD_ARRAY
:
646 return ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
;
647 case GL_EDGE_FLAG_ARRAY
:
648 return ctx
->Array
.EdgeFlag
.Enabled
;
650 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
659 client_state( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
661 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
,
663 ? "glEnableClientState"
664 : "glDisableClientState") );
667 case GL_VERTEX_ARRAY
:
668 ctx
->Array
.Vertex
.Enabled
= state
;
670 case GL_NORMAL_ARRAY
:
671 ctx
->Array
.Normal
.Enabled
= state
;
674 ctx
->Array
.Color
.Enabled
= state
;
677 ctx
->Array
.Index
.Enabled
= state
;
679 case GL_TEXTURE_COORD_ARRAY
:
680 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
682 case GL_EDGE_FLAG_ARRAY
:
683 ctx
->Array
.EdgeFlag
.Enabled
= state
;
686 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable/DisableClientState" );
689 ctx
->NewState
|= NEW_CLIENT_STATE
;
695 _mesa_EnableClientState( GLenum cap
)
697 GET_CURRENT_CONTEXT(ctx
);
698 client_state( ctx
, cap
, GL_TRUE
);
704 _mesa_DisableClientState( GLenum cap
)
706 GET_CURRENT_CONTEXT(ctx
);
707 client_state( ctx
, cap
, GL_FALSE
);