1 /* $Id: enable.c,v 1.9 1999/11/10 06:29:44 keithw 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.
28 /* $XFree86: xc/lib/GL/mesa/src/enable.c,v 1.3 1999/04/04 00:20:23 dawes Exp $ */
37 #include "GL/xf86glx.h"
45 #include "simple_list.h"
55 * Perform glEnable and glDisable calls.
57 void gl_set_enable( GLcontext
*ctx
, GLenum cap
, GLboolean state
)
59 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx
, "gl_enable/disable" );
61 if (MESA_VERBOSE
& VERBOSE_API
)
62 fprintf(stderr
, "%s %s (newstate is %x)\n",
63 state
? "glEnable" : "glDisable",
64 gl_lookup_enum_by_nr(cap
),
69 if (ctx
->Color
.AlphaEnabled
!=state
) {
70 ctx
->Color
.AlphaEnabled
= state
;
71 ctx
->NewState
|= NEW_RASTER_OPS
;
75 ctx
->Eval
.AutoNormal
= state
;
78 if (ctx
->Color
.BlendEnabled
!=state
) {
79 ctx
->Color
.BlendEnabled
= state
;
80 /* The following needed to accomodate 1.0 RGB logic op blending */
81 if (ctx
->Color
.BlendEquation
==GL_LOGIC_OP
&& state
) {
82 ctx
->Color
.ColorLogicOpEnabled
= GL_TRUE
;
85 ctx
->Color
.ColorLogicOpEnabled
= GL_FALSE
;
87 ctx
->NewState
|= NEW_RASTER_OPS
;
96 if (cap
>= GL_CLIP_PLANE0
&&
97 cap
<= GL_CLIP_PLANE5
&&
98 ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
] != state
)
100 GLuint p
= cap
-GL_CLIP_PLANE0
;
102 ctx
->Transform
.ClipEnabled
[p
] = state
;
103 ctx
->NewState
|= NEW_USER_CLIP
;
106 ctx
->Enabled
|= ENABLE_USERCLIP
;
107 ctx
->Transform
.AnyClip
++;
109 if (ctx
->ProjectionMatrix
.flags
& MAT_DIRTY_ALL_OVER
) {
110 gl_matrix_analyze( &ctx
->ProjectionMatrix
);
113 gl_transform_vector( ctx
->Transform
.ClipUserPlane
[p
],
114 ctx
->Transform
.EyeUserPlane
[p
],
115 ctx
->ProjectionMatrix
.inv
);
117 if (--ctx
->Transform
.AnyClip
== 0)
118 ctx
->Enabled
&= ~ENABLE_USERCLIP
;
122 case GL_COLOR_MATERIAL
:
123 if (ctx
->Light
.ColorMaterialEnabled
!=state
) {
124 ctx
->Light
.ColorMaterialEnabled
= state
;
125 ctx
->NewState
|= NEW_LIGHTING
;
127 gl_update_color_material( ctx
, ctx
->Current
.ByteColor
);
131 if (ctx
->Polygon
.CullFlag
!=state
) {
132 ctx
->Polygon
.CullFlag
= state
;
133 ctx
->TriangleCaps
^= DD_TRI_CULL
;
134 ctx
->NewState
|= NEW_POLYGON
;
138 if (state
&& ctx
->Visual
->DepthBits
==0) {
139 gl_warning(ctx
,"glEnable(GL_DEPTH_TEST) but no depth buffer");
142 if (ctx
->Depth
.Test
!=state
) {
143 ctx
->Depth
.Test
= state
;
144 ctx
->NewState
|= NEW_RASTER_OPS
;
149 /* MESA_NO_DITHER env var */
152 if (ctx
->Color
.DitherFlag
!=state
) {
153 ctx
->Color
.DitherFlag
= state
;
154 ctx
->NewState
|= NEW_RASTER_OPS
;
158 if (ctx
->Fog
.Enabled
!=state
) {
159 ctx
->Fog
.Enabled
= state
;
160 ctx
->Enabled
^= ENABLE_FOG
;
161 ctx
->NewState
|= NEW_FOG
|NEW_RASTER_OPS
;
172 if (ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
!= state
)
174 ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
= state
;
177 insert_at_tail(&ctx
->Light
.EnabledList
,
178 &ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
179 if (ctx
->Light
.Enabled
)
180 ctx
->Enabled
|= ENABLE_LIGHT
;
182 remove_from_list(&ctx
->Light
.Light
[cap
-GL_LIGHT0
]);
183 if (is_empty_list(&ctx
->Light
.EnabledList
))
184 ctx
->Enabled
&= ~ENABLE_LIGHT
;
187 ctx
->NewState
|= NEW_LIGHTING
;
191 if (ctx
->Light
.Enabled
!=state
) {
192 ctx
->Light
.Enabled
= state
;
193 ctx
->Enabled
&= ~ENABLE_LIGHT
;
195 ctx
->Enabled
|= ENABLE_LIGHT
;
196 ctx
->NewState
|= NEW_LIGHTING
;
200 if (ctx
->Line
.SmoothFlag
!=state
) {
201 ctx
->Line
.SmoothFlag
= state
;
202 ctx
->NewState
|= NEW_RASTER_OPS
;
205 case GL_LINE_STIPPLE
:
206 if (ctx
->Line
.StippleFlag
!=state
) {
207 ctx
->Line
.StippleFlag
= state
;
208 ctx
->TriangleCaps
^= DD_LINE_STIPPLE
;
209 ctx
->NewState
|= NEW_RASTER_OPS
;
212 case GL_INDEX_LOGIC_OP
:
213 if (ctx
->Color
.IndexLogicOpEnabled
!=state
) {
214 ctx
->Color
.IndexLogicOpEnabled
= state
;
215 ctx
->NewState
|= NEW_RASTER_OPS
;
218 case GL_COLOR_LOGIC_OP
:
219 if (ctx
->Color
.ColorLogicOpEnabled
!=state
) {
220 ctx
->Color
.ColorLogicOpEnabled
= state
;
221 ctx
->NewState
|= NEW_RASTER_OPS
;
224 case GL_MAP1_COLOR_4
:
225 ctx
->Eval
.Map1Color4
= state
;
228 ctx
->Eval
.Map1Index
= state
;
231 ctx
->Eval
.Map1Normal
= state
;
233 case GL_MAP1_TEXTURE_COORD_1
:
234 ctx
->Eval
.Map1TextureCoord1
= state
;
236 case GL_MAP1_TEXTURE_COORD_2
:
237 ctx
->Eval
.Map1TextureCoord2
= state
;
239 case GL_MAP1_TEXTURE_COORD_3
:
240 ctx
->Eval
.Map1TextureCoord3
= state
;
242 case GL_MAP1_TEXTURE_COORD_4
:
243 ctx
->Eval
.Map1TextureCoord4
= state
;
245 case GL_MAP1_VERTEX_3
:
246 ctx
->Eval
.Map1Vertex3
= state
;
248 case GL_MAP1_VERTEX_4
:
249 ctx
->Eval
.Map1Vertex4
= state
;
251 case GL_MAP2_COLOR_4
:
252 ctx
->Eval
.Map2Color4
= state
;
255 ctx
->Eval
.Map2Index
= state
;
258 ctx
->Eval
.Map2Normal
= state
;
260 case GL_MAP2_TEXTURE_COORD_1
:
261 ctx
->Eval
.Map2TextureCoord1
= state
;
263 case GL_MAP2_TEXTURE_COORD_2
:
264 ctx
->Eval
.Map2TextureCoord2
= state
;
266 case GL_MAP2_TEXTURE_COORD_3
:
267 ctx
->Eval
.Map2TextureCoord3
= state
;
269 case GL_MAP2_TEXTURE_COORD_4
:
270 ctx
->Eval
.Map2TextureCoord4
= state
;
272 case GL_MAP2_VERTEX_3
:
273 ctx
->Eval
.Map2Vertex3
= state
;
275 case GL_MAP2_VERTEX_4
:
276 ctx
->Eval
.Map2Vertex4
= 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
;
338 if (ctx
->Driver
.UseGlobalTexturePalette
)
339 (*ctx
->Driver
.UseGlobalTexturePalette
)( ctx
, state
);
341 case GL_STENCIL_TEST
:
342 if (state
&& ctx
->Visual
->StencilBits
==0) {
343 gl_warning(ctx
, "glEnable(GL_STENCIL_TEST) but no stencil buffer");
346 if (ctx
->Stencil
.Enabled
!=state
) {
347 ctx
->Stencil
.Enabled
= state
;
348 ctx
->NewState
|= NEW_RASTER_OPS
;
349 ctx
->TriangleCaps
^= DD_STENCIL
;
353 if (ctx
->Visual
->RGBAflag
) {
354 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
355 const GLuint flag
= TEXTURE0_1D
<< (curr
* 4);
356 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
357 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
359 texUnit
->Enabled
|= TEXTURE0_1D
;
360 ctx
->Enabled
|= flag
;
363 texUnit
->Enabled
&= ~TEXTURE0_1D
;
364 ctx
->Enabled
&= ~flag
;
369 if (ctx
->Visual
->RGBAflag
) {
370 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
371 const GLuint flag
= TEXTURE0_2D
<< (curr
* 4);
372 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
373 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
375 texUnit
->Enabled
|= TEXTURE0_2D
;
376 ctx
->Enabled
|= flag
;
379 texUnit
->Enabled
&= ~TEXTURE0_2D
;
380 ctx
->Enabled
&= ~flag
;
385 if (ctx
->Visual
->RGBAflag
) {
386 const GLuint curr
= ctx
->Texture
.CurrentUnit
;
387 const GLuint flag
= TEXTURE0_3D
<< (curr
* 4);
388 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[curr
];
389 ctx
->NewState
|= NEW_TEXTURE_ENABLE
;
391 texUnit
->Enabled
|= TEXTURE0_3D
;
392 ctx
->Enabled
|= flag
;
395 texUnit
->Enabled
&= ~TEXTURE0_3D
;
396 ctx
->Enabled
&= ~flag
;
400 case GL_TEXTURE_GEN_Q
:
402 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
404 texUnit
->TexGenEnabled
|= Q_BIT
;
406 texUnit
->TexGenEnabled
&= ~Q_BIT
;
407 ctx
->NewState
|= NEW_TEXTURING
;
410 case GL_TEXTURE_GEN_R
:
412 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
414 texUnit
->TexGenEnabled
|= R_BIT
;
416 texUnit
->TexGenEnabled
&= ~R_BIT
;
417 ctx
->NewState
|= NEW_TEXTURING
;
420 case GL_TEXTURE_GEN_S
:
422 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
424 texUnit
->TexGenEnabled
|= S_BIT
;
426 texUnit
->TexGenEnabled
&= ~S_BIT
;
427 ctx
->NewState
|= NEW_TEXTURING
;
430 case GL_TEXTURE_GEN_T
:
432 struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
434 texUnit
->TexGenEnabled
|= T_BIT
;
436 texUnit
->TexGenEnabled
&= ~T_BIT
;
437 ctx
->NewState
|= NEW_TEXTURING
;
444 case GL_VERTEX_ARRAY
:
445 ctx
->Array
.Vertex
.Enabled
= state
;
447 case GL_NORMAL_ARRAY
:
448 ctx
->Array
.Normal
.Enabled
= state
;
451 ctx
->Array
.Color
.Enabled
= state
;
454 ctx
->Array
.Index
.Enabled
= state
;
456 case GL_TEXTURE_COORD_ARRAY
:
457 ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
= state
;
459 case GL_EDGE_FLAG_ARRAY
:
460 ctx
->Array
.EdgeFlag
.Enabled
= state
;
465 gl_error( ctx
, GL_INVALID_ENUM
, "glEnable" );
468 gl_error( ctx
, GL_INVALID_ENUM
, "glDisable" );
473 if (ctx
->Driver
.Enable
) {
474 (*ctx
->Driver
.Enable
)( ctx
, cap
, state
);
481 void gl_Enable( GLcontext
* ctx
, GLenum cap
)
483 gl_set_enable( ctx
, cap
, GL_TRUE
);
488 void gl_Disable( GLcontext
* ctx
, GLenum cap
)
490 gl_set_enable( ctx
, cap
, GL_FALSE
);
495 GLboolean
gl_IsEnabled( GLcontext
* ctx
, GLenum cap
)
499 return ctx
->Color
.AlphaEnabled
;
501 return ctx
->Eval
.AutoNormal
;
503 return ctx
->Color
.BlendEnabled
;
510 return ctx
->Transform
.ClipEnabled
[cap
-GL_CLIP_PLANE0
];
511 case GL_COLOR_MATERIAL
:
512 return ctx
->Light
.ColorMaterialEnabled
;
514 return ctx
->Polygon
.CullFlag
;
516 return ctx
->Depth
.Test
;
518 return ctx
->Color
.DitherFlag
;
520 return ctx
->Fog
.Enabled
;
522 return ctx
->Light
.Enabled
;
531 return ctx
->Light
.Light
[cap
-GL_LIGHT0
].Enabled
;
533 return ctx
->Line
.SmoothFlag
;
534 case GL_LINE_STIPPLE
:
535 return ctx
->Line
.StippleFlag
;
536 case GL_INDEX_LOGIC_OP
:
537 return ctx
->Color
.IndexLogicOpEnabled
;
538 case GL_COLOR_LOGIC_OP
:
539 return ctx
->Color
.ColorLogicOpEnabled
;
540 case GL_MAP1_COLOR_4
:
541 return ctx
->Eval
.Map1Color4
;
543 return ctx
->Eval
.Map1Index
;
545 return ctx
->Eval
.Map1Normal
;
546 case GL_MAP1_TEXTURE_COORD_1
:
547 return ctx
->Eval
.Map1TextureCoord1
;
548 case GL_MAP1_TEXTURE_COORD_2
:
549 return ctx
->Eval
.Map1TextureCoord2
;
550 case GL_MAP1_TEXTURE_COORD_3
:
551 return ctx
->Eval
.Map1TextureCoord3
;
552 case GL_MAP1_TEXTURE_COORD_4
:
553 return ctx
->Eval
.Map1TextureCoord4
;
554 case GL_MAP1_VERTEX_3
:
555 return ctx
->Eval
.Map1Vertex3
;
556 case GL_MAP1_VERTEX_4
:
557 return ctx
->Eval
.Map1Vertex4
;
558 case GL_MAP2_COLOR_4
:
559 return ctx
->Eval
.Map2Color4
;
561 return ctx
->Eval
.Map2Index
;
563 return ctx
->Eval
.Map2Normal
;
564 case GL_MAP2_TEXTURE_COORD_1
:
565 return ctx
->Eval
.Map2TextureCoord1
;
566 case GL_MAP2_TEXTURE_COORD_2
:
567 return ctx
->Eval
.Map2TextureCoord2
;
568 case GL_MAP2_TEXTURE_COORD_3
:
569 return ctx
->Eval
.Map2TextureCoord3
;
570 case GL_MAP2_TEXTURE_COORD_4
:
571 return ctx
->Eval
.Map2TextureCoord4
;
572 case GL_MAP2_VERTEX_3
:
573 return ctx
->Eval
.Map2Vertex3
;
574 case GL_MAP2_VERTEX_4
:
575 return ctx
->Eval
.Map2Vertex4
;
577 return ctx
->Transform
.Normalize
;
578 case GL_POINT_SMOOTH
:
579 return ctx
->Point
.SmoothFlag
;
580 case GL_POLYGON_SMOOTH
:
581 return ctx
->Polygon
.SmoothFlag
;
582 case GL_POLYGON_STIPPLE
:
583 return ctx
->Polygon
.StippleFlag
;
584 case GL_POLYGON_OFFSET_POINT
:
585 return ctx
->Polygon
.OffsetPoint
;
586 case GL_POLYGON_OFFSET_LINE
:
587 return ctx
->Polygon
.OffsetLine
;
588 case GL_POLYGON_OFFSET_FILL
:
589 /*case GL_POLYGON_OFFSET_EXT:*/
590 return ctx
->Polygon
.OffsetFill
;
591 case GL_RESCALE_NORMAL_EXT
:
592 return ctx
->Transform
.RescaleNormals
;
593 case GL_SCISSOR_TEST
:
594 return ctx
->Scissor
.Enabled
;
595 case GL_SHARED_TEXTURE_PALETTE_EXT
:
596 return ctx
->Texture
.SharedPalette
;
597 case GL_STENCIL_TEST
:
598 return ctx
->Stencil
.Enabled
;
601 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
602 return (texUnit
->Enabled
& TEXTURE0_1D
) ? GL_TRUE
: GL_FALSE
;
606 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
607 return (texUnit
->Enabled
& TEXTURE0_2D
) ? GL_TRUE
: GL_FALSE
;
611 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
612 return (texUnit
->Enabled
& TEXTURE0_3D
) ? GL_TRUE
: GL_FALSE
;
614 case GL_TEXTURE_GEN_Q
:
616 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
617 return (texUnit
->TexGenEnabled
& Q_BIT
) ? GL_TRUE
: GL_FALSE
;
619 case GL_TEXTURE_GEN_R
:
621 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
622 return (texUnit
->TexGenEnabled
& R_BIT
) ? GL_TRUE
: GL_FALSE
;
624 case GL_TEXTURE_GEN_S
:
626 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
627 return (texUnit
->TexGenEnabled
& S_BIT
) ? GL_TRUE
: GL_FALSE
;
629 case GL_TEXTURE_GEN_T
:
631 const struct gl_texture_unit
*texUnit
= &ctx
->Texture
.Unit
[ctx
->Texture
.CurrentUnit
];
632 return (texUnit
->TexGenEnabled
& T_BIT
) ? GL_TRUE
: GL_FALSE
;
638 case GL_VERTEX_ARRAY
:
639 return ctx
->Array
.Vertex
.Enabled
;
640 case GL_NORMAL_ARRAY
:
641 return ctx
->Array
.Normal
.Enabled
;
643 return ctx
->Array
.Color
.Enabled
;
645 return ctx
->Array
.Index
.Enabled
;
646 case GL_TEXTURE_COORD_ARRAY
:
647 return ctx
->Array
.TexCoord
[ctx
->Array
.ActiveTexture
].Enabled
;
648 case GL_EDGE_FLAG_ARRAY
:
649 return ctx
->Array
.EdgeFlag
.Enabled
;
651 gl_error( ctx
, GL_INVALID_ENUM
, "glIsEnabled" );
659 static void gl_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
;
694 void gl_EnableClientState( GLcontext
*ctx
, GLenum cap
)
696 gl_client_state( ctx
, cap
, GL_TRUE
);
701 void gl_DisableClientState( GLcontext
*ctx
, GLenum cap
)
703 gl_client_state( ctx
, cap
, GL_FALSE
);