Changeset 3598 for trunk/src/opengl/mesa/enable.c
- Timestamp:
- May 23, 2000, 10:41:28 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/opengl/mesa/enable.c
r2962 r3598 1 /* $Id: enable.c,v 1. 2 2000-03-01 18:49:27jeroen Exp $ */1 /* $Id: enable.c,v 1.3 2000-05-23 20:40:32 jeroen Exp $ */ 2 2 3 3 /* 4 4 * Mesa 3-D graphics library 5 * Version: 3. 15 * Version: 3.3 6 6 * 7 7 * Copyright (C) 1999 Brian Paul All Rights Reserved. … … 31 31 #include "all.h" 32 32 #else 33 #ifndef XFree86Server 34 #include <stdio.h> 35 #include <string.h> 36 #else 37 #include "GL/xf86glx.h" 38 #endif 33 #include "glheader.h" 39 34 #include "types.h" 40 35 #include "context.h" … … 55 50 * Perform glEnable and glDisable calls. 56 51 */ 57 void gl_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )52 void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) 58 53 { 59 54 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "gl_enable/disable" ); … … 61 56 if (MESA_VERBOSE & VERBOSE_API) 62 57 fprintf(stderr, "%s %s (newstate is %x)\n", 63 64 65 58 state ? "glEnable" : "glDisable", 59 gl_lookup_enum_by_nr(cap), 60 ctx->NewState); 66 61 67 62 switch (cap) { … … 71 66 ctx->NewState |= NEW_RASTER_OPS; 72 67 } 73 68 break; 74 69 case GL_AUTO_NORMAL: 75 76 70 ctx->Eval.AutoNormal = state; 71 break; 77 72 case GL_BLEND: 78 73 if (ctx->Color.BlendEnabled!=state) { … … 87 82 ctx->NewState |= NEW_RASTER_OPS; 88 83 } 89 84 break; 90 85 case GL_CLIP_PLANE0: 91 86 case GL_CLIP_PLANE1: … … 94 89 case GL_CLIP_PLANE4: 95 90 case GL_CLIP_PLANE5: 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 ctx->Enabled &= ~ENABLE_USERCLIP; 119 } 120 121 91 if (cap >= GL_CLIP_PLANE0 && 92 cap <= GL_CLIP_PLANE5 && 93 ctx->Transform.ClipEnabled[cap-GL_CLIP_PLANE0] != state) 94 { 95 GLuint p = cap-GL_CLIP_PLANE0; 96 97 ctx->Transform.ClipEnabled[p] = state; 98 ctx->NewState |= NEW_USER_CLIP; 99 100 if (state) { 101 ctx->Enabled |= ENABLE_USERCLIP; 102 ctx->Transform.AnyClip++; 103 104 if (ctx->ProjectionMatrix.flags & MAT_DIRTY_ALL_OVER) { 105 gl_matrix_analyze( &ctx->ProjectionMatrix ); 106 } 107 108 gl_transform_vector( ctx->Transform.ClipUserPlane[p], 109 ctx->Transform.EyeUserPlane[p], 110 ctx->ProjectionMatrix.inv ); 111 } else { 112 if (--ctx->Transform.AnyClip == 0) 113 ctx->Enabled &= ~ENABLE_USERCLIP; 114 } 115 } 116 break; 122 117 case GL_COLOR_MATERIAL: 123 118 if (ctx->Light.ColorMaterialEnabled!=state) { 124 119 ctx->Light.ColorMaterialEnabled = state; 125 126 127 128 } 129 120 ctx->NewState |= NEW_LIGHTING; 121 if (state) 122 gl_update_color_material( ctx, ctx->Current.ByteColor ); 123 } 124 break; 130 125 case GL_CULL_FACE: 131 126 if (ctx->Polygon.CullFlag!=state) { 132 127 ctx->Polygon.CullFlag = state; 133 128 ctx->TriangleCaps ^= DD_TRI_CULL; 134 129 ctx->NewState |= NEW_POLYGON; 135 130 } 136 131 break; 137 132 case GL_DEPTH_TEST: 138 133 if (state && ctx->Visual->DepthBits==0) { … … 140 135 return; 141 136 } 142 137 if (ctx->Depth.Test!=state) { 143 138 ctx->Depth.Test = state; 144 139 ctx->NewState |= NEW_RASTER_OPS; … … 154 149 ctx->NewState |= NEW_RASTER_OPS; 155 150 } 156 151 break; 157 152 case GL_FOG: 158 153 if (ctx->Fog.Enabled!=state) { 159 154 ctx->Fog.Enabled = state; 160 155 ctx->Enabled ^= ENABLE_FOG; 161 156 ctx->NewState |= NEW_FOG|NEW_RASTER_OPS; 162 157 } 163 158 break; 164 159 case GL_LIGHT0: 165 160 case GL_LIGHT1: … … 170 165 case GL_LIGHT6: 171 166 case GL_LIGHT7: 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 167 if (ctx->Light.Light[cap-GL_LIGHT0].Enabled != state) 168 { 169 ctx->Light.Light[cap-GL_LIGHT0].Enabled = state; 170 171 if (state) { 172 insert_at_tail(&ctx->Light.EnabledList, 173 &ctx->Light.Light[cap-GL_LIGHT0]); 174 if (ctx->Light.Enabled) 175 ctx->Enabled |= ENABLE_LIGHT; 176 } else { 177 remove_from_list(&ctx->Light.Light[cap-GL_LIGHT0]); 178 if (is_empty_list(&ctx->Light.EnabledList)) 179 ctx->Enabled &= ~ENABLE_LIGHT; 180 } 181 182 ctx->NewState |= NEW_LIGHTING; 183 } 189 184 break; 190 185 case GL_LIGHTING: 191 186 if (ctx->Light.Enabled!=state) { 192 187 ctx->Light.Enabled = state; 193 188 ctx->Enabled &= ~ENABLE_LIGHT; 194 189 if (state) 195 190 ctx->Enabled |= ENABLE_LIGHT; 196 191 ctx->NewState |= NEW_LIGHTING; 197 192 } 198 193 break; 199 194 case GL_LINE_SMOOTH: 200 195 if (ctx->Line.SmoothFlag!=state) { 201 196 ctx->Line.SmoothFlag = state; 202 197 ctx->NewState |= NEW_RASTER_OPS; 203 198 } 204 199 break; 205 200 case GL_LINE_STIPPLE: 206 201 if (ctx->Line.StippleFlag!=state) { 207 202 ctx->Line.StippleFlag = state; 208 209 ctx->NewState |= NEW_RASTER_OPS; 210 } 211 203 ctx->TriangleCaps ^= DD_LINE_STIPPLE; 204 ctx->NewState |= NEW_RASTER_OPS; 205 } 206 break; 212 207 case GL_INDEX_LOGIC_OP: 213 208 if (ctx->Color.IndexLogicOpEnabled!=state) { 214 215 ctx->NewState |= NEW_RASTER_OPS; 216 } 217 209 ctx->Color.IndexLogicOpEnabled = state; 210 ctx->NewState |= NEW_RASTER_OPS; 211 } 212 break; 218 213 case GL_COLOR_LOGIC_OP: 219 214 if (ctx->Color.ColorLogicOpEnabled!=state) { 220 221 ctx->NewState |= NEW_RASTER_OPS; 222 } 223 215 ctx->Color.ColorLogicOpEnabled = state; 216 ctx->NewState |= NEW_RASTER_OPS; 217 } 218 break; 224 219 case GL_MAP1_COLOR_4: 225 226 220 ctx->Eval.Map1Color4 = state; 221 break; 227 222 case GL_MAP1_INDEX: 228 229 223 ctx->Eval.Map1Index = state; 224 break; 230 225 case GL_MAP1_NORMAL: 231 232 226 ctx->Eval.Map1Normal = state; 227 break; 233 228 case GL_MAP1_TEXTURE_COORD_1: 234 235 229 ctx->Eval.Map1TextureCoord1 = state; 230 break; 236 231 case GL_MAP1_TEXTURE_COORD_2: 237 238 232 ctx->Eval.Map1TextureCoord2 = state; 233 break; 239 234 case GL_MAP1_TEXTURE_COORD_3: 240 241 235 ctx->Eval.Map1TextureCoord3 = state; 236 break; 242 237 case GL_MAP1_TEXTURE_COORD_4: 243 244 238 ctx->Eval.Map1TextureCoord4 = state; 239 break; 245 240 case GL_MAP1_VERTEX_3: 246 247 241 ctx->Eval.Map1Vertex3 = state; 242 break; 248 243 case GL_MAP1_VERTEX_4: 249 250 244 ctx->Eval.Map1Vertex4 = state; 245 break; 251 246 case GL_MAP2_COLOR_4: 252 253 247 ctx->Eval.Map2Color4 = state; 248 break; 254 249 case GL_MAP2_INDEX: 255 256 250 ctx->Eval.Map2Index = state; 251 break; 257 252 case GL_MAP2_NORMAL: 258 259 253 ctx->Eval.Map2Normal = state; 254 break; 260 255 case GL_MAP2_TEXTURE_COORD_1: 261 262 256 ctx->Eval.Map2TextureCoord1 = state; 257 break; 263 258 case GL_MAP2_TEXTURE_COORD_2: 264 265 259 ctx->Eval.Map2TextureCoord2 = state; 260 break; 266 261 case GL_MAP2_TEXTURE_COORD_3: 267 268 262 ctx->Eval.Map2TextureCoord3 = state; 263 break; 269 264 case GL_MAP2_TEXTURE_COORD_4: 270 271 265 ctx->Eval.Map2TextureCoord4 = state; 266 break; 272 267 case GL_MAP2_VERTEX_3: 273 274 268 ctx->Eval.Map2Vertex3 = state; 269 break; 275 270 case GL_MAP2_VERTEX_4: 276 277 271 ctx->Eval.Map2Vertex4 = state; 272 break; 278 273 case GL_NORMALIZE: 279 280 281 282 283 284 274 if (ctx->Transform.Normalize != state) { 275 ctx->Transform.Normalize = state; 276 ctx->NewState |= NEW_NORMAL_TRANSFORM|NEW_LIGHTING; 277 ctx->Enabled ^= ENABLE_NORMALIZE; 278 } 279 break; 285 280 case GL_POINT_SMOOTH: 286 281 if (ctx->Point.SmoothFlag!=state) { 287 282 ctx->Point.SmoothFlag = state; 288 283 ctx->NewState |= NEW_RASTER_OPS; 289 284 } 290 285 break; 291 286 case GL_POLYGON_SMOOTH: 292 287 if (ctx->Polygon.SmoothFlag!=state) { 293 288 ctx->Polygon.SmoothFlag = state; 294 289 ctx->NewState |= NEW_RASTER_OPS; 295 290 } 296 291 break; 297 292 case GL_POLYGON_STIPPLE: 298 293 if (ctx->Polygon.StippleFlag!=state) { 299 294 ctx->Polygon.StippleFlag = state; 300 301 ctx->NewState |= NEW_RASTER_OPS; 302 } 303 295 ctx->TriangleCaps ^= DD_TRI_STIPPLE; 296 ctx->NewState |= NEW_RASTER_OPS; 297 } 298 break; 304 299 case GL_POLYGON_OFFSET_POINT: 305 300 if (ctx->Polygon.OffsetPoint!=state) { … … 322 317 break; 323 318 case GL_RESCALE_NORMAL_EXT: 324 325 326 327 328 319 if (ctx->Transform.RescaleNormals != state) { 320 ctx->Transform.RescaleNormals = state; 321 ctx->NewState |= NEW_NORMAL_TRANSFORM|NEW_LIGHTING; 322 ctx->Enabled ^= ENABLE_RESCALE; 323 } 329 324 break; 330 325 case GL_SCISSOR_TEST: … … 333 328 ctx->NewState |= NEW_RASTER_OPS; 334 329 } 335 330 break; 336 331 case GL_SHARED_TEXTURE_PALETTE_EXT: 337 332 ctx->Texture.SharedPalette = state; 338 if (ctx->Driver.UseGlobalTexturePalette)339 (*ctx->Driver.UseGlobalTexturePalette)( ctx, state );340 333 break; 341 334 case GL_STENCIL_TEST: 342 335 if (state && ctx->Visual->StencilBits==0) { 343 336 gl_warning(ctx, "glEnable(GL_STENCIL_TEST) but no stencil buffer"); 344 337 return; 345 346 338 } 339 if (ctx->Stencil.Enabled!=state) { 347 340 ctx->Stencil.Enabled = state; 348 341 ctx->NewState |= NEW_RASTER_OPS; 349 350 } 351 342 ctx->TriangleCaps ^= DD_STENCIL; 343 } 344 break; 352 345 case GL_TEXTURE_1D: 353 346 if (ctx->Visual->RGBAflag) { 354 355 347 const GLuint curr = ctx->Texture.CurrentUnit; 348 const GLuint flag = TEXTURE0_1D << (curr * 4); 356 349 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr]; 357 350 ctx->NewState |= NEW_TEXTURE_ENABLE; 358 351 if (state) { 359 360 361 352 texUnit->Enabled |= TEXTURE0_1D; 353 ctx->Enabled |= flag; 354 } 362 355 else { 363 356 texUnit->Enabled &= ~TEXTURE0_1D; … … 368 361 case GL_TEXTURE_2D: 369 362 if (ctx->Visual->RGBAflag) { 370 371 363 const GLuint curr = ctx->Texture.CurrentUnit; 364 const GLuint flag = TEXTURE0_2D << (curr * 4); 372 365 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr]; 373 366 ctx->NewState |= NEW_TEXTURE_ENABLE; 374 367 if (state) { 375 376 377 368 texUnit->Enabled |= TEXTURE0_2D; 369 ctx->Enabled |= flag; 370 } 378 371 else { 379 372 texUnit->Enabled &= ~TEXTURE0_2D; … … 381 374 } 382 375 } 383 376 break; 384 377 case GL_TEXTURE_3D: 385 378 if (ctx->Visual->RGBAflag) { 386 387 379 const GLuint curr = ctx->Texture.CurrentUnit; 380 const GLuint flag = TEXTURE0_3D << (curr * 4); 388 381 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[curr]; 389 382 ctx->NewState |= NEW_TEXTURE_ENABLE; 390 383 if (state) { 391 392 393 384 texUnit->Enabled |= TEXTURE0_3D; 385 ctx->Enabled |= flag; 386 } 394 387 else { 395 388 texUnit->Enabled &= ~TEXTURE0_3D; … … 407 400 ctx->NewState |= NEW_TEXTURING; 408 401 } 409 402 break; 410 403 case GL_TEXTURE_GEN_R: 411 404 { … … 417 410 ctx->NewState |= NEW_TEXTURING; 418 411 } 419 412 break; 420 413 case GL_TEXTURE_GEN_S: 421 414 { … … 427 420 ctx->NewState |= NEW_TEXTURING; 428 421 } 429 422 break; 430 423 case GL_TEXTURE_GEN_T: 431 424 { … … 437 430 ctx->NewState |= NEW_TEXTURING; 438 431 } 439 432 break; 440 433 441 434 /* … … 461 454 break; 462 455 456 /* GL_HP_occlusion_test */ 457 case GL_OCCLUSION_TEST_HP: 458 if (ctx->Extensions.HaveHpOcclusionTest) { 459 ctx->Depth.OcclusionTest = state; 460 ctx->NewState |= NEW_RASTER_OPS; 461 } 462 else { 463 gl_error( ctx, GL_INVALID_ENUM, state ? "glEnable": "glDisable" ); 464 return; 465 } 466 break; 467 463 468 default: 464 465 466 467 468 469 469 if (state) { 470 gl_error( ctx, GL_INVALID_ENUM, "glEnable" ); 471 } 472 else { 473 gl_error( ctx, GL_INVALID_ENUM, "glDisable" ); 474 } 470 475 return; 471 476 } … … 479 484 480 485 481 void gl_Enable( GLcontext* ctx, GLenum cap ) 486 void 487 _mesa_Enable( GLenum cap ) 482 488 { 483 gl_set_enable( ctx, cap, GL_TRUE ); 489 GET_CURRENT_CONTEXT(ctx); 490 _mesa_set_enable( ctx, cap, GL_TRUE ); 484 491 } 485 492 486 493 487 494 488 void gl_Disable( GLcontext* ctx, GLenum cap ) 495 void 496 _mesa_Disable( GLenum cap ) 489 497 { 490 gl_set_enable( ctx, cap, GL_FALSE ); 498 GET_CURRENT_CONTEXT(ctx); 499 _mesa_set_enable( ctx, cap, GL_FALSE ); 491 500 } 492 501 493 502 494 503 495 GLboolean gl_IsEnabled( GLcontext* ctx, GLenum cap ) 504 GLboolean 505 _mesa_IsEnabled( GLenum cap ) 496 506 { 507 GET_CURRENT_CONTEXT(ctx); 497 508 switch (cap) { 498 509 case GL_ALPHA_TEST: 499 510 return ctx->Color.AlphaEnabled; 500 511 case GL_AUTO_NORMAL: 501 512 return ctx->Eval.AutoNormal; 502 513 case GL_BLEND: 503 514 return ctx->Color.BlendEnabled; … … 508 519 case GL_CLIP_PLANE4: 509 520 case GL_CLIP_PLANE5: 510 521 return ctx->Transform.ClipEnabled[cap-GL_CLIP_PLANE0]; 511 522 case GL_COLOR_MATERIAL: 512 523 return ctx->Light.ColorMaterialEnabled; 513 524 case GL_CULL_FACE: 514 525 return ctx->Polygon.CullFlag; … … 516 527 return ctx->Depth.Test; 517 528 case GL_DITHER: 518 529 return ctx->Color.DitherFlag; 519 530 case GL_FOG: 520 531 return ctx->Fog.Enabled; 521 532 case GL_LIGHTING: 522 533 return ctx->Light.Enabled; … … 531 542 return ctx->Light.Light[cap-GL_LIGHT0].Enabled; 532 543 case GL_LINE_SMOOTH: 533 544 return ctx->Line.SmoothFlag; 534 545 case GL_LINE_STIPPLE: 535 546 return ctx->Line.StippleFlag; 536 547 case GL_INDEX_LOGIC_OP: 537 548 return ctx->Color.IndexLogicOpEnabled; 538 549 case GL_COLOR_LOGIC_OP: 539 550 return ctx->Color.ColorLogicOpEnabled; 540 551 case GL_MAP1_COLOR_4: 541 552 return ctx->Eval.Map1Color4; 542 553 case GL_MAP1_INDEX: 543 554 return ctx->Eval.Map1Index; 544 555 case GL_MAP1_NORMAL: 545 556 return ctx->Eval.Map1Normal; 546 557 case GL_MAP1_TEXTURE_COORD_1: 547 558 return ctx->Eval.Map1TextureCoord1; 548 559 case GL_MAP1_TEXTURE_COORD_2: 549 560 return ctx->Eval.Map1TextureCoord2; 550 561 case GL_MAP1_TEXTURE_COORD_3: 551 562 return ctx->Eval.Map1TextureCoord3; 552 563 case GL_MAP1_TEXTURE_COORD_4: 553 564 return ctx->Eval.Map1TextureCoord4; 554 565 case GL_MAP1_VERTEX_3: 555 566 return ctx->Eval.Map1Vertex3; 556 567 case GL_MAP1_VERTEX_4: 557 568 return ctx->Eval.Map1Vertex4; 558 569 case GL_MAP2_COLOR_4: 559 570 return ctx->Eval.Map2Color4; 560 571 case GL_MAP2_INDEX: 561 572 return ctx->Eval.Map2Index; 562 573 case GL_MAP2_NORMAL: 563 574 return ctx->Eval.Map2Normal; 564 575 case GL_MAP2_TEXTURE_COORD_1: 565 576 return ctx->Eval.Map2TextureCoord1; 566 577 case GL_MAP2_TEXTURE_COORD_2: 567 578 return ctx->Eval.Map2TextureCoord2; 568 579 case GL_MAP2_TEXTURE_COORD_3: 569 580 return ctx->Eval.Map2TextureCoord3; 570 581 case GL_MAP2_TEXTURE_COORD_4: 571 582 return ctx->Eval.Map2TextureCoord4; 572 583 case GL_MAP2_VERTEX_3: 573 584 return ctx->Eval.Map2Vertex3; 574 585 case GL_MAP2_VERTEX_4: 575 586 return ctx->Eval.Map2Vertex4; 576 587 case GL_NORMALIZE: 577 588 return ctx->Transform.Normalize; 578 589 case GL_POINT_SMOOTH: 579 590 return ctx->Point.SmoothFlag; 580 591 case GL_POLYGON_SMOOTH: 581 592 return ctx->Polygon.SmoothFlag; 582 593 case GL_POLYGON_STIPPLE: 583 594 return ctx->Polygon.StippleFlag; 584 595 case GL_POLYGON_OFFSET_POINT: 585 596 return ctx->Polygon.OffsetPoint; 586 597 case GL_POLYGON_OFFSET_LINE: 587 598 return ctx->Polygon.OffsetLine; 588 599 case GL_POLYGON_OFFSET_FILL: 589 600 /*case GL_POLYGON_OFFSET_EXT:*/ 590 601 return ctx->Polygon.OffsetFill; 591 602 case GL_RESCALE_NORMAL_EXT: 592 603 return ctx->Transform.RescaleNormals; 593 604 case GL_SCISSOR_TEST: 594 605 return ctx->Scissor.Enabled; 595 606 case GL_SHARED_TEXTURE_PALETTE_EXT: 596 607 return ctx->Texture.SharedPalette; 597 608 case GL_STENCIL_TEST: 598 609 return ctx->Stencil.Enabled; 599 610 case GL_TEXTURE_1D: 600 611 { … … 648 659 case GL_EDGE_FLAG_ARRAY: 649 660 return ctx->Array.EdgeFlag.Enabled; 661 662 /* GL_HP_occlusion_test */ 663 case GL_OCCLUSION_TEST_HP: 664 if (ctx->Extensions.HaveHpOcclusionTest) { 665 return ctx->Depth.OcclusionTest; 666 } 667 else { 668 gl_error( ctx, GL_INVALID_ENUM, "glIsEnabled" ); 669 return GL_FALSE; 670 } 671 650 672 default: 651 652 673 gl_error( ctx, GL_INVALID_ENUM, "glIsEnabled" ); 674 return GL_FALSE; 653 675 } 654 676 } … … 657 679 658 680 659 static void gl_client_state( GLcontext *ctx, GLenum cap, GLboolean state ) 681 static void 682 client_state( GLcontext *ctx, GLenum cap, GLboolean state ) 660 683 { 661 684 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, 662 663 664 685 (state 686 ? "glEnableClientState" 687 : "glDisableClientState") ); 665 688 666 689 switch (cap) { … … 692 715 693 716 694 void gl_EnableClientState( GLcontext *ctx, GLenum cap ) 717 void 718 _mesa_EnableClientState( GLenum cap ) 695 719 { 696 gl_client_state( ctx, cap, GL_TRUE ); 720 GET_CURRENT_CONTEXT(ctx); 721 client_state( ctx, cap, GL_TRUE ); 697 722 } 698 723 699 724 700 725 701 void gl_DisableClientState( GLcontext *ctx, GLenum cap ) 726 void 727 _mesa_DisableClientState( GLenum cap ) 702 728 { 703 gl_client_state( ctx, cap, GL_FALSE ); 729 GET_CURRENT_CONTEXT(ctx); 730 client_state( ctx, cap, GL_FALSE ); 704 731 } 705 732
Note:
See TracChangeset
for help on using the changeset viewer.