Changeset 3598 for trunk/src/opengl/mesa/eval.c
- Timestamp:
- May 23, 2000, 10:41:28 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/opengl/mesa/eval.c
r2962 r3598 1 /* $Id: eval.c,v 1. 2 2000-03-01 18:49:28jeroen Exp $ */1 /* $Id: eval.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. … … 42 42 #include "all.h" 43 43 #else 44 #ifndef XFree86Server 45 #include <math.h> 46 #include <stdlib.h> 47 #include <string.h> 48 #else 49 #include "GL/xf86glx.h" 50 #endif 44 #include "glheader.h" 51 45 #include "types.h" 52 46 #include "context.h" … … 54 48 #include "macros.h" 55 49 #include "mmath.h" 50 #include "mem.h" 56 51 #include "types.h" 57 52 #include "vbcull.h" … … 80 75 { 81 76 for (i = 1 ; i < MAX_EVAL_ORDER ; i++) 82 77 inv_tab[i] = 1.0 / i; 83 78 } 84 79 … … 179 174 /* Each control point is the point for parameter u on a */ 180 175 /* curve defined by the control polygons in u-direction */ 181 182 183 184 185 186 187 176 bincoeff = uorder-1; 177 s = 1.0-u; 178 179 for(k=0; k<dim; k++) 180 cp[j*dim+k] = s*ucp[k] + bincoeff*u*ucp[uinc+k]; 181 182 for(i=2, ucp+=2*uinc, poweru=u*u; i<uorder; 188 183 i++, poweru*=u, ucp +=uinc) 189 190 184 { 185 bincoeff *= uorder-i; 191 186 bincoeff *= inv_tab[i]; 192 187 193 194 195 188 for(k=0; k<dim; k++) 189 cp[j*dim+k] = s*cp[j*dim+k] + bincoeff*poweru*ucp[k]; 190 } 196 191 } 197 192 … … 211 206 for(i=0; i<uorder; i++, cn += uinc) 212 207 { 213 214 215 216 217 208 /* For constant i all cn[i][j] (j=0..vorder) are located */ 209 /* on consecutive memory locations, so we can use */ 210 /* horner_bezier_curve to compute the control points */ 211 212 horner_bezier_curve(cn, &cp[i*dim], v, dim, vorder); 218 213 } 219 214 … … 266 261 for(k=0; k<dim; k++) 267 262 { 268 269 270 271 272 273 274 275 276 263 /* Derivative direction in u */ 264 du[k] = vs*(CN(1,0,k) - CN(0,0,k)) + 265 v*(CN(1,1,k) - CN(0,1,k)); 266 267 /* Derivative direction in v */ 268 dv[k] = us*(CN(0,1,k) - CN(0,0,k)) + 269 u*(CN(1,1,k) - CN(1,0,k)); 270 271 /* bilinear de Casteljau step */ 277 272 out[k] = us*(vs*CN(0,0,k) + v*CN(0,1,k)) + 278 273 u*(vs*CN(1,0,k) + v*CN(1,1,k)); 279 274 } 280 275 } … … 283 278 for(k=0; k<dim; k++) 284 279 { 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 280 /* bilinear de Casteljau step */ 281 DCN(1,0) = CN(1,0,k) - CN(0,0,k); 282 DCN(0,0) = us*CN(0,0,k) + u*CN(1,0,k); 283 284 for(j=0; j<vorder-1; j++) 285 { 286 /* for the derivative in u */ 287 DCN(1,j+1) = CN(1,j+1,k) - CN(0,j+1,k); 288 DCN(1,j) = vs*DCN(1,j) + v*DCN(1,j+1); 289 290 /* for the `point' */ 291 DCN(0,j+1) = us*CN(0,j+1,k) + u*CN(1,j+1,k); 292 DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 293 } 294 295 /* remaining linear de Casteljau steps until the second last step */ 296 for(h=minorder; h<vorder-1; h++) 297 for(j=0; j<vorder-h; j++) 298 { 299 /* for the derivative in u */ 300 DCN(1,j) = vs*DCN(1,j) + v*DCN(1,j+1); 301 302 /* for the `point' */ 303 DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 304 } 305 306 /* derivative direction in v */ 307 dv[k] = DCN(0,1) - DCN(0,0); 308 309 /* derivative direction in u */ 310 du[k] = vs*DCN(1,0) + v*DCN(1,1); 311 312 /* last linear de Casteljau step */ 313 out[k] = vs*DCN(0,0) + v*DCN(0,1); 319 314 } 320 315 } … … 323 318 for(k=0; k<dim; k++) 324 319 { 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 320 /* bilinear de Casteljau step */ 321 DCN(0,1) = CN(0,1,k) - CN(0,0,k); 322 DCN(0,0) = vs*CN(0,0,k) + v*CN(0,1,k); 323 for(i=0; i<uorder-1; i++) 324 { 325 /* for the derivative in v */ 326 DCN(i+1,1) = CN(i+1,1,k) - CN(i+1,0,k); 327 DCN(i,1) = us*DCN(i,1) + u*DCN(i+1,1); 328 329 /* for the `point' */ 330 DCN(i+1,0) = vs*CN(i+1,0,k) + v*CN(i+1,1,k); 331 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 332 } 333 334 /* remaining linear de Casteljau steps until the second last step */ 335 for(h=minorder; h<uorder-1; h++) 336 for(i=0; i<uorder-h; i++) 337 { 338 /* for the derivative in v */ 339 DCN(i,1) = us*DCN(i,1) + u*DCN(i+1,1); 340 341 /* for the `point' */ 342 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 343 } 344 345 /* derivative direction in u */ 346 du[k] = DCN(1,0) - DCN(0,0); 347 348 /* derivative direction in v */ 349 dv[k] = us*DCN(0,1) + u*DCN(1,1); 350 351 /* last linear de Casteljau step */ 352 out[k] = us*DCN(0,0) + u*DCN(1,0); 358 353 } 359 354 } … … 366 361 for(i=0; i<uorder-1; i++) 367 362 { 368 369 370 371 372 373 363 DCN(i,0) = us*CN(i,0,k) + u*CN(i+1,0,k); 364 for(j=0; j<vorder-1; j++) 365 { 366 DCN(i,j+1) = us*CN(i,j+1,k) + u*CN(i+1,j+1,k); 367 DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 368 } 374 369 } 375 370 376 371 /* remaining bilinear de Casteljau steps until the second last step */ 377 372 for(h=2; h<minorder-1; h++) 378 379 380 381 382 383 384 385 386 373 for(i=0; i<uorder-h; i++) 374 { 375 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 376 for(j=0; j<vorder-h; j++) 377 { 378 DCN(i,j+1) = us*DCN(i,j+1) + u*DCN(i+1,j+1); 379 DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 380 } 381 } 387 382 388 383 /* derivative direction in u */ 389 384 du[k] = vs*(DCN(1,0) - DCN(0,0)) + 390 385 v*(DCN(1,1) - DCN(0,1)); 391 386 392 387 /* derivative direction in v */ 393 388 dv[k] = us*(DCN(0,1) - DCN(0,0)) + 394 389 u*(DCN(1,1) - DCN(1,0)); 395 390 396 391 /* last bilinear de Casteljau step */ 397 392 out[k] = us*(vs*DCN(0,0) + v*DCN(0,1)) + 398 393 u*(vs*DCN(1,0) + v*DCN(1,1)); 399 394 } 400 395 } … … 406 401 for(i=0; i<uorder-1; i++) 407 402 { 408 409 410 411 412 413 403 DCN(i,0) = us*CN(i,0,k) + u*CN(i+1,0,k); 404 for(j=0; j<vorder-1; j++) 405 { 406 DCN(i,j+1) = us*CN(i,j+1,k) + u*CN(i+1,j+1,k); 407 DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 408 } 414 409 } 415 410 416 411 /* remaining bilinear de Casteljau steps until the second last step */ 417 412 for(h=2; h<minorder-1; h++) 418 419 420 421 422 423 424 425 426 413 for(i=0; i<uorder-h; i++) 414 { 415 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 416 for(j=0; j<vorder-h; j++) 417 { 418 DCN(i,j+1) = us*DCN(i,j+1) + u*DCN(i+1,j+1); 419 DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 420 } 421 } 427 422 428 423 /* last bilinear de Casteljau step */ … … 431 426 for(j=0; j<vorder-1; j++) 432 427 { 433 434 435 436 437 438 439 428 /* for the derivative in u */ 429 DCN(2,j+1) = DCN(1,j+1) - DCN(0,j+1); 430 DCN(2,j) = vs*DCN(2,j) + v*DCN(2,j+1); 431 432 /* for the `point' */ 433 DCN(0,j+1) = us*DCN(0,j+1 ) + u*DCN(1,j+1); 434 DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 440 435 } 441 436 442 437 /* remaining linear de Casteljau steps until the second last step */ 443 438 for(h=minorder; h<vorder-1; h++) 444 445 446 447 448 449 450 451 439 for(j=0; j<vorder-h; j++) 440 { 441 /* for the derivative in u */ 442 DCN(2,j) = vs*DCN(2,j) + v*DCN(2,j+1); 443 444 /* for the `point' */ 445 DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 446 } 452 447 453 448 /* derivative direction in v */ … … 468 463 for(i=0; i<uorder-1; i++) 469 464 { 470 471 472 473 474 475 465 DCN(i,0) = us*CN(i,0,k) + u*CN(i+1,0,k); 466 for(j=0; j<vorder-1; j++) 467 { 468 DCN(i,j+1) = us*CN(i,j+1,k) + u*CN(i+1,j+1,k); 469 DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 470 } 476 471 } 477 472 478 473 /* remaining bilinear de Casteljau steps until the second last step */ 479 474 for(h=2; h<minorder-1; h++) 480 481 482 483 484 485 486 487 488 475 for(i=0; i<uorder-h; i++) 476 { 477 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 478 for(j=0; j<vorder-h; j++) 479 { 480 DCN(i,j+1) = us*DCN(i,j+1) + u*DCN(i+1,j+1); 481 DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 482 } 483 } 489 484 490 485 /* last bilinear de Casteljau step */ … … 493 488 for(i=0; i<uorder-1; i++) 494 489 { 495 496 497 498 499 500 501 490 /* for the derivative in v */ 491 DCN(i+1,2) = DCN(i+1,1) - DCN(i+1,0); 492 DCN(i,2) = us*DCN(i,2) + u*DCN(i+1,2); 493 494 /* for the `point' */ 495 DCN(i+1,0) = vs*DCN(i+1,0) + v*DCN(i+1,1); 496 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 502 497 } 503 498 504 499 /* remaining linear de Casteljau steps until the second last step */ 505 500 for(h=minorder; h<uorder-1; h++) 506 507 508 509 510 511 512 513 501 for(i=0; i<uorder-h; i++) 502 { 503 /* for the derivative in v */ 504 DCN(i,2) = us*DCN(i,2) + u*DCN(i+1,2); 505 506 /* for the `point' */ 507 DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 508 } 514 509 515 510 /* derivative direction in u */ … … 530 525 * Return the number of components per control point for any type of 531 526 * evaluator. Return 0 if bad target. 527 * See table 5.1 in the OpenGL 1.2 spec. 532 528 */ 533 534 static GLint components( GLenum target ) 529 GLuint _mesa_evaluator_components( GLenum target ) 535 530 { 536 531 switch (target) { 537 case GL_MAP1_VERTEX_3: 538 case GL_MAP1_VERTEX_4: 539 case GL_MAP1_INDEX: 540 case GL_MAP1_COLOR_4: 541 case GL_MAP1_NORMAL: 542 case GL_MAP1_TEXTURE_COORD_1: 543 case GL_MAP1_TEXTURE_COORD_2: 544 case GL_MAP1_TEXTURE_COORD_3: 545 case GL_MAP1_TEXTURE_COORD_4: 546 case GL_MAP2_VERTEX_3: 547 case GL_MAP2_VERTEX_4: 548 case GL_MAP2_INDEX: 549 case GL_MAP2_COLOR_4: 550 case GL_MAP2_NORMAL: 551 case GL_MAP2_TEXTURE_COORD_1: 552 case GL_MAP2_TEXTURE_COORD_2: 553 case GL_MAP2_TEXTURE_COORD_3: 554 case GL_MAP2_TEXTURE_COORD_4: 555 default: 532 case GL_MAP1_VERTEX_3: return 3; 533 case GL_MAP1_VERTEX_4: return 4; 534 case GL_MAP1_INDEX: return 1; 535 case GL_MAP1_COLOR_4: return 4; 536 case GL_MAP1_NORMAL: return 3; 537 case GL_MAP1_TEXTURE_COORD_1: return 1; 538 case GL_MAP1_TEXTURE_COORD_2: return 2; 539 case GL_MAP1_TEXTURE_COORD_3: return 3; 540 case GL_MAP1_TEXTURE_COORD_4: return 4; 541 case GL_MAP2_VERTEX_3: return 3; 542 case GL_MAP2_VERTEX_4: return 4; 543 case GL_MAP2_INDEX: return 1; 544 case GL_MAP2_COLOR_4: return 4; 545 case GL_MAP2_NORMAL: return 3; 546 case GL_MAP2_TEXTURE_COORD_1: return 1; 547 case GL_MAP2_TEXTURE_COORD_2: return 2; 548 case GL_MAP2_TEXTURE_COORD_3: return 3; 549 case GL_MAP2_TEXTURE_COORD_4: return 4; 550 default: return 0; 556 551 } 557 552 } … … 570 565 * of memory. 571 566 */ 572 GLfloat *gl_copy_map_points1f( GLenum target, 573 GLint ustride, GLint uorder, 567 GLfloat *gl_copy_map_points1f( GLenum target, GLint ustride, GLint uorder, 574 568 const GLfloat *points ) 575 569 { 576 570 GLfloat *buffer, *p; 577 GLint i, k, size = components(target);571 GLint i, k, size = _mesa_evaluator_components(target); 578 572 579 573 if (!points || size==0) { … … 585 579 if(buffer) 586 580 for(i=0, p=buffer; i<uorder; i++, points+=ustride) 587 588 581 for(k=0; k<size; k++) 582 *p++ = points[k]; 589 583 590 584 return buffer; … … 596 590 * Same as above but convert doubles to floats. 597 591 */ 598 GLfloat *gl_copy_map_points1d( GLenum target, 599 GLint ustride, GLint uorder, 600 const GLdouble *points ) 592 GLfloat *gl_copy_map_points1d( GLenum target, GLint ustride, GLint uorder, 593 const GLdouble *points ) 601 594 { 602 595 GLfloat *buffer, *p; 603 GLint i, k, size = components(target);596 GLint i, k, size = _mesa_evaluator_components(target); 604 597 605 598 if (!points || size==0) { … … 611 604 if(buffer) 612 605 for(i=0, p=buffer; i<uorder; i++, points+=ustride) 613 614 606 for(k=0; k<size; k++) 607 *p++ = (GLfloat) points[k]; 615 608 616 609 return buffer; … … 630 623 */ 631 624 GLfloat *gl_copy_map_points2f( GLenum target, 632 633 634 625 GLint ustride, GLint uorder, 626 GLint vstride, GLint vorder, 627 const GLfloat *points ) 635 628 { 636 629 GLfloat *buffer, *p; … … 638 631 GLint uinc; 639 632 640 size = components(target);633 size = _mesa_evaluator_components(target); 641 634 642 635 if (!points || size==0) { … … 660 653 if (buffer) 661 654 for (i=0, p=buffer; i<uorder; i++, points += uinc) 662 663 664 655 for (j=0; j<vorder; j++, points += vstride) 656 for (k=0; k<size; k++) 657 *p++ = points[k]; 665 658 666 659 return buffer; … … 681 674 GLint uinc; 682 675 683 size = components(target);676 size = _mesa_evaluator_components(target); 684 677 685 678 if (!points || size==0) { … … 703 696 if (buffer) 704 697 for (i=0, p=buffer; i<uorder; i++, points += uinc) 705 706 707 698 for (j=0; j<vorder; j++, points += vstride) 699 for (k=0; k<size; k++) 700 *p++ = (GLfloat) points[k]; 708 701 709 702 return buffer; … … 711 704 712 705 706 #if 00 713 707 /* 714 708 * This function is called by the display list deallocator function to … … 726 720 case GL_MAP1_VERTEX_4: 727 721 map1 = &ctx->EvalMap.Map1Vertex4; 728 722 break; 729 723 case GL_MAP1_INDEX: 730 724 map1 = &ctx->EvalMap.Map1Index; … … 735 729 case GL_MAP1_NORMAL: 736 730 map1 = &ctx->EvalMap.Map1Normal; 737 731 break; 738 732 case GL_MAP1_TEXTURE_COORD_1: 739 733 map1 = &ctx->EvalMap.Map1Texture1; 740 734 break; 741 735 case GL_MAP1_TEXTURE_COORD_2: 742 736 map1 = &ctx->EvalMap.Map1Texture2; 743 737 break; 744 738 case GL_MAP1_TEXTURE_COORD_3: 745 739 map1 = &ctx->EvalMap.Map1Texture3; 746 740 break; 747 741 case GL_MAP1_TEXTURE_COORD_4: 748 742 map1 = &ctx->EvalMap.Map1Texture4; 749 743 break; 750 744 case GL_MAP2_VERTEX_3: 751 745 map2 = &ctx->EvalMap.Map2Vertex3; 752 746 break; 753 747 case GL_MAP2_VERTEX_4: 754 748 map2 = &ctx->EvalMap.Map2Vertex4; 755 749 break; 756 750 case GL_MAP2_INDEX: 757 751 map2 = &ctx->EvalMap.Map2Index; 758 752 break; 759 753 case GL_MAP2_COLOR_4: 760 754 map2 = &ctx->EvalMap.Map2Color4; … … 762 756 case GL_MAP2_NORMAL: 763 757 map2 = &ctx->EvalMap.Map2Normal; 764 758 break; 765 759 case GL_MAP2_TEXTURE_COORD_1: 766 760 map2 = &ctx->EvalMap.Map2Texture1; 767 761 break; 768 762 case GL_MAP2_TEXTURE_COORD_2: 769 763 map2 = &ctx->EvalMap.Map2Texture2; 770 764 break; 771 765 case GL_MAP2_TEXTURE_COORD_3: 772 766 map2 = &ctx->EvalMap.Map2Texture3; 773 767 break; 774 768 case GL_MAP2_TEXTURE_COORD_4: 775 769 map2 = &ctx->EvalMap.Map2Texture4; 776 770 break; 777 771 default: 778 772 gl_error( ctx, GL_INVALID_ENUM, "gl_free_control_points" ); 779 773 return; 780 774 } … … 806 800 807 801 } 802 #endif 808 803 809 804 … … 815 810 816 811 /* 817 * Note that the array of control points must be 'unpacked' at this time. 818 * Input: retain - if TRUE, this control point data is also in a display 819 * list and can't be freed until the list is freed. 812 * This does the work of glMap1[fd]. 820 813 */ 821 void gl_Map1f( GLcontext* ctx, GLenum target, 822 GLfloat u1, GLfloat u2, GLint stride, 823 GLint order, const GLfloat *points, GLboolean retain ) 824 { 814 static void 815 map1(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, 816 GLint uorder, const GLvoid *points, GLenum type ) 817 { 818 GET_CURRENT_CONTEXT(ctx); 825 819 GLint k; 826 827 if (!points) { 828 gl_error( ctx, GL_OUT_OF_MEMORY, "glMap1f" ); 829 return; 830 } 831 832 /* may be a new stride after copying control points */ 833 stride = components( target ); 820 GLfloat *pnts; 834 821 835 822 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMap1"); 836 823 837 if (u1==u2) { 824 ASSERT(type == GL_FLOAT || type == GL_DOUBLE); 825 826 if (u1 == u2) { 838 827 gl_error( ctx, GL_INVALID_VALUE, "glMap1(u1,u2)" ); 839 828 return; 840 829 } 841 842 if (order<1 || order>MAX_EVAL_ORDER) { 830 if (uorder < 1 || uorder > MAX_EVAL_ORDER) { 843 831 gl_error( ctx, GL_INVALID_VALUE, "glMap1(order)" ); 844 832 return; 845 833 } 846 847 k = components( target ); 848 if (k==0) { 834 if (!points) { 835 gl_error( ctx, GL_INVALID_VALUE, "glMap1(points)" ); 836 return; 837 } 838 839 k = _mesa_evaluator_components( target ); 840 if (k == 0) { 849 841 gl_error( ctx, GL_INVALID_ENUM, "glMap1(target)" ); 850 842 } 851 843 852 if ( stride < k) {844 if (ustride < k) { 853 845 gl_error( ctx, GL_INVALID_VALUE, "glMap1(stride)" ); 854 846 return; 855 847 } 856 848 849 /* make copy of the control points */ 850 if (type == GL_FLOAT) 851 pnts = gl_copy_map_points1f(target, ustride, uorder, (GLfloat*) points); 852 else 853 pnts = gl_copy_map_points1d(target, ustride, uorder, (GLdouble*) points); 854 857 855 switch (target) { 858 856 case GL_MAP1_VERTEX_3: 859 ctx->EvalMap.Map1Vertex3.Order = order; 860 ctx->EvalMap.Map1Vertex3.u1 = u1; 861 ctx->EvalMap.Map1Vertex3.u2 = u2; 862 ctx->EvalMap.Map1Vertex3.du = 1.0 / (u2 - u1); 863 if (ctx->EvalMap.Map1Vertex3.Points 864 && !ctx->EvalMap.Map1Vertex3.Retain) { 865 FREE( ctx->EvalMap.Map1Vertex3.Points ); 866 } 867 ctx->EvalMap.Map1Vertex3.Points = (GLfloat *) points; 868 ctx->EvalMap.Map1Vertex3.Retain = retain; 869 break; 857 ctx->EvalMap.Map1Vertex3.Order = uorder; 858 ctx->EvalMap.Map1Vertex3.u1 = u1; 859 ctx->EvalMap.Map1Vertex3.u2 = u2; 860 ctx->EvalMap.Map1Vertex3.du = 1.0 / (u2 - u1); 861 if (ctx->EvalMap.Map1Vertex3.Points) 862 FREE( ctx->EvalMap.Map1Vertex3.Points ); 863 ctx->EvalMap.Map1Vertex3.Points = pnts; 864 break; 870 865 case GL_MAP1_VERTEX_4: 871 ctx->EvalMap.Map1Vertex4.Order = order; 872 ctx->EvalMap.Map1Vertex4.u1 = u1; 873 ctx->EvalMap.Map1Vertex4.u2 = u2; 874 ctx->EvalMap.Map1Vertex4.du = 1.0 / (u2 - u1); 875 if (ctx->EvalMap.Map1Vertex4.Points 876 && !ctx->EvalMap.Map1Vertex4.Retain) { 877 FREE( ctx->EvalMap.Map1Vertex4.Points ); 878 } 879 ctx->EvalMap.Map1Vertex4.Points = (GLfloat *) points; 880 ctx->EvalMap.Map1Vertex4.Retain = retain; 881 break; 866 ctx->EvalMap.Map1Vertex4.Order = uorder; 867 ctx->EvalMap.Map1Vertex4.u1 = u1; 868 ctx->EvalMap.Map1Vertex4.u2 = u2; 869 ctx->EvalMap.Map1Vertex4.du = 1.0 / (u2 - u1); 870 if (ctx->EvalMap.Map1Vertex4.Points) 871 FREE( ctx->EvalMap.Map1Vertex4.Points ); 872 ctx->EvalMap.Map1Vertex4.Points = pnts; 873 break; 882 874 case GL_MAP1_INDEX: 883 ctx->EvalMap.Map1Index.Order = order; 884 ctx->EvalMap.Map1Index.u1 = u1; 885 ctx->EvalMap.Map1Index.u2 = u2; 886 ctx->EvalMap.Map1Index.du = 1.0 / (u2 - u1); 887 if (ctx->EvalMap.Map1Index.Points 888 && !ctx->EvalMap.Map1Index.Retain) { 889 FREE( ctx->EvalMap.Map1Index.Points ); 890 } 891 ctx->EvalMap.Map1Index.Points = (GLfloat *) points; 892 ctx->EvalMap.Map1Index.Retain = retain; 893 break; 875 ctx->EvalMap.Map1Index.Order = uorder; 876 ctx->EvalMap.Map1Index.u1 = u1; 877 ctx->EvalMap.Map1Index.u2 = u2; 878 ctx->EvalMap.Map1Index.du = 1.0 / (u2 - u1); 879 if (ctx->EvalMap.Map1Index.Points) 880 FREE( ctx->EvalMap.Map1Index.Points ); 881 ctx->EvalMap.Map1Index.Points = pnts; 882 break; 894 883 case GL_MAP1_COLOR_4: 895 ctx->EvalMap.Map1Color4.Order = order; 896 ctx->EvalMap.Map1Color4.u1 = u1; 897 ctx->EvalMap.Map1Color4.u2 = u2; 898 ctx->EvalMap.Map1Color4.du = 1.0 / (u2 - u1); 899 if (ctx->EvalMap.Map1Color4.Points 900 && !ctx->EvalMap.Map1Color4.Retain) { 901 FREE( ctx->EvalMap.Map1Color4.Points ); 902 } 903 ctx->EvalMap.Map1Color4.Points = (GLfloat *) points; 904 ctx->EvalMap.Map1Color4.Retain = retain; 905 break; 884 ctx->EvalMap.Map1Color4.Order = uorder; 885 ctx->EvalMap.Map1Color4.u1 = u1; 886 ctx->EvalMap.Map1Color4.u2 = u2; 887 ctx->EvalMap.Map1Color4.du = 1.0 / (u2 - u1); 888 if (ctx->EvalMap.Map1Color4.Points) 889 FREE( ctx->EvalMap.Map1Color4.Points ); 890 ctx->EvalMap.Map1Color4.Points = pnts; 891 break; 906 892 case GL_MAP1_NORMAL: 907 ctx->EvalMap.Map1Normal.Order = order; 908 ctx->EvalMap.Map1Normal.u1 = u1; 909 ctx->EvalMap.Map1Normal.u2 = u2; 910 ctx->EvalMap.Map1Normal.du = 1.0 / (u2 - u1); 911 if (ctx->EvalMap.Map1Normal.Points 912 && !ctx->EvalMap.Map1Normal.Retain) { 913 FREE( ctx->EvalMap.Map1Normal.Points ); 914 } 915 ctx->EvalMap.Map1Normal.Points = (GLfloat *) points; 916 ctx->EvalMap.Map1Normal.Retain = retain; 917 break; 893 ctx->EvalMap.Map1Normal.Order = uorder; 894 ctx->EvalMap.Map1Normal.u1 = u1; 895 ctx->EvalMap.Map1Normal.u2 = u2; 896 ctx->EvalMap.Map1Normal.du = 1.0 / (u2 - u1); 897 if (ctx->EvalMap.Map1Normal.Points) 898 FREE( ctx->EvalMap.Map1Normal.Points ); 899 ctx->EvalMap.Map1Normal.Points = pnts; 900 break; 918 901 case GL_MAP1_TEXTURE_COORD_1: 919 ctx->EvalMap.Map1Texture1.Order = order; 920 ctx->EvalMap.Map1Texture1.u1 = u1; 921 ctx->EvalMap.Map1Texture1.u2 = u2; 922 ctx->EvalMap.Map1Texture1.du = 1.0 / (u2 - u1); 923 if (ctx->EvalMap.Map1Texture1.Points 924 && !ctx->EvalMap.Map1Texture1.Retain) { 925 FREE( ctx->EvalMap.Map1Texture1.Points ); 926 } 927 ctx->EvalMap.Map1Texture1.Points = (GLfloat *) points; 928 ctx->EvalMap.Map1Texture1.Retain = retain; 929 break; 902 ctx->EvalMap.Map1Texture1.Order = uorder; 903 ctx->EvalMap.Map1Texture1.u1 = u1; 904 ctx->EvalMap.Map1Texture1.u2 = u2; 905 ctx->EvalMap.Map1Texture1.du = 1.0 / (u2 - u1); 906 if (ctx->EvalMap.Map1Texture1.Points) 907 FREE( ctx->EvalMap.Map1Texture1.Points ); 908 ctx->EvalMap.Map1Texture1.Points = pnts; 909 break; 930 910 case GL_MAP1_TEXTURE_COORD_2: 931 ctx->EvalMap.Map1Texture2.Order = order; 932 ctx->EvalMap.Map1Texture2.u1 = u1; 933 ctx->EvalMap.Map1Texture2.u2 = u2; 934 ctx->EvalMap.Map1Texture2.du = 1.0 / (u2 - u1); 935 if (ctx->EvalMap.Map1Texture2.Points 936 && !ctx->EvalMap.Map1Texture2.Retain) { 937 FREE( ctx->EvalMap.Map1Texture2.Points ); 938 } 939 ctx->EvalMap.Map1Texture2.Points = (GLfloat *) points; 940 ctx->EvalMap.Map1Texture2.Retain = retain; 941 break; 911 ctx->EvalMap.Map1Texture2.Order = uorder; 912 ctx->EvalMap.Map1Texture2.u1 = u1; 913 ctx->EvalMap.Map1Texture2.u2 = u2; 914 ctx->EvalMap.Map1Texture2.du = 1.0 / (u2 - u1); 915 if (ctx->EvalMap.Map1Texture2.Points) 916 FREE( ctx->EvalMap.Map1Texture2.Points ); 917 ctx->EvalMap.Map1Texture2.Points = pnts; 918 break; 942 919 case GL_MAP1_TEXTURE_COORD_3: 943 ctx->EvalMap.Map1Texture3.Order = order; 944 ctx->EvalMap.Map1Texture3.u1 = u1; 945 ctx->EvalMap.Map1Texture3.u2 = u2; 946 ctx->EvalMap.Map1Texture3.du = 1.0 / (u2 - u1); 947 if (ctx->EvalMap.Map1Texture3.Points 948 && !ctx->EvalMap.Map1Texture3.Retain) { 949 FREE( ctx->EvalMap.Map1Texture3.Points ); 950 } 951 ctx->EvalMap.Map1Texture3.Points = (GLfloat *) points; 952 ctx->EvalMap.Map1Texture3.Retain = retain; 953 break; 920 ctx->EvalMap.Map1Texture3.Order = uorder; 921 ctx->EvalMap.Map1Texture3.u1 = u1; 922 ctx->EvalMap.Map1Texture3.u2 = u2; 923 ctx->EvalMap.Map1Texture3.du = 1.0 / (u2 - u1); 924 if (ctx->EvalMap.Map1Texture3.Points) 925 FREE( ctx->EvalMap.Map1Texture3.Points ); 926 ctx->EvalMap.Map1Texture3.Points = pnts; 927 break; 954 928 case GL_MAP1_TEXTURE_COORD_4: 955 ctx->EvalMap.Map1Texture4.Order = order; 956 ctx->EvalMap.Map1Texture4.u1 = u1; 957 ctx->EvalMap.Map1Texture4.u2 = u2; 958 ctx->EvalMap.Map1Texture4.du = 1.0 / (u2 - u1); 959 if (ctx->EvalMap.Map1Texture4.Points 960 && !ctx->EvalMap.Map1Texture4.Retain) { 961 FREE( ctx->EvalMap.Map1Texture4.Points ); 962 } 963 ctx->EvalMap.Map1Texture4.Points = (GLfloat *) points; 964 ctx->EvalMap.Map1Texture4.Retain = retain; 965 break; 929 ctx->EvalMap.Map1Texture4.Order = uorder; 930 ctx->EvalMap.Map1Texture4.u1 = u1; 931 ctx->EvalMap.Map1Texture4.u2 = u2; 932 ctx->EvalMap.Map1Texture4.du = 1.0 / (u2 - u1); 933 if (ctx->EvalMap.Map1Texture4.Points) 934 FREE( ctx->EvalMap.Map1Texture4.Points ); 935 ctx->EvalMap.Map1Texture4.Points = pnts; 936 break; 966 937 default: 967 938 gl_error( ctx, GL_INVALID_ENUM, "glMap1(target)" ); … … 969 940 } 970 941 971 972 973 974 /* 975 * Note that the array of control points must be 'unpacked' at this time. 976 * Input: retain - if TRUE, this control point data is also in a display 977 * list and can't be freed until the list is freed. 978 */ 979 void gl_Map2f( GLcontext* ctx, GLenum target, 980 GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, 981 GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, 982 const GLfloat *points, GLboolean retain ) 983 { 942 void 943 _mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, 944 GLint order, const GLfloat *points ) 945 { 946 map1(target, u1, u2, stride, order, points, GL_FLOAT); 947 } 948 949 950 void 951 _mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, 952 GLint order, const GLdouble *points ) 953 { 954 map1(target, u1, u2, stride, order, points, GL_DOUBLE); 955 } 956 957 958 static void 959 map2( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, 960 GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, 961 const GLvoid *points, GLenum type ) 962 { 963 GET_CURRENT_CONTEXT(ctx); 984 964 GLint k; 965 GLfloat *pnts; 985 966 986 967 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMap2"); … … 1006 987 } 1007 988 1008 k = components( target );989 k = _mesa_evaluator_components( target ); 1009 990 if (k==0) { 1010 991 gl_error( ctx, GL_INVALID_ENUM, "glMap2(target)" ); … … 1020 1001 } 1021 1002 1003 /* make copy of the control points */ 1004 if (type == GL_FLOAT) 1005 pnts = gl_copy_map_points2f(target, ustride, uorder, 1006 vstride, vorder, (GLfloat*) points); 1007 else 1008 pnts = gl_copy_map_points2d(target, ustride, uorder, 1009 vstride, vorder, (GLdouble*) points); 1010 1022 1011 switch (target) { 1023 1012 case GL_MAP2_VERTEX_3: 1024 1013 ctx->EvalMap.Map2Vertex3.Uorder = uorder; 1025 1026 1027 1014 ctx->EvalMap.Map2Vertex3.u1 = u1; 1015 ctx->EvalMap.Map2Vertex3.u2 = u2; 1016 ctx->EvalMap.Map2Vertex3.du = 1.0 / (u2 - u1); 1028 1017 ctx->EvalMap.Map2Vertex3.Vorder = vorder; 1029 ctx->EvalMap.Map2Vertex3.v1 = v1; 1030 ctx->EvalMap.Map2Vertex3.v2 = v2; 1031 ctx->EvalMap.Map2Vertex3.dv = 1.0 / (v2 - v1); 1032 if (ctx->EvalMap.Map2Vertex3.Points 1033 && !ctx->EvalMap.Map2Vertex3.Retain) { 1034 FREE( ctx->EvalMap.Map2Vertex3.Points ); 1035 } 1036 ctx->EvalMap.Map2Vertex3.Retain = retain; 1037 ctx->EvalMap.Map2Vertex3.Points = (GLfloat *) points; 1038 break; 1018 ctx->EvalMap.Map2Vertex3.v1 = v1; 1019 ctx->EvalMap.Map2Vertex3.v2 = v2; 1020 ctx->EvalMap.Map2Vertex3.dv = 1.0 / (v2 - v1); 1021 if (ctx->EvalMap.Map2Vertex3.Points) 1022 FREE( ctx->EvalMap.Map2Vertex3.Points ); 1023 ctx->EvalMap.Map2Vertex3.Points = pnts; 1024 break; 1039 1025 case GL_MAP2_VERTEX_4: 1040 1026 ctx->EvalMap.Map2Vertex4.Uorder = uorder; 1041 1042 1043 1027 ctx->EvalMap.Map2Vertex4.u1 = u1; 1028 ctx->EvalMap.Map2Vertex4.u2 = u2; 1029 ctx->EvalMap.Map2Vertex4.du = 1.0 / (u2 - u1); 1044 1030 ctx->EvalMap.Map2Vertex4.Vorder = vorder; 1045 ctx->EvalMap.Map2Vertex4.v1 = v1; 1046 ctx->EvalMap.Map2Vertex4.v2 = v2; 1047 ctx->EvalMap.Map2Vertex4.dv = 1.0 / (v2 - v1); 1048 if (ctx->EvalMap.Map2Vertex4.Points 1049 && !ctx->EvalMap.Map2Vertex4.Retain) { 1050 FREE( ctx->EvalMap.Map2Vertex4.Points ); 1051 } 1052 ctx->EvalMap.Map2Vertex4.Points = (GLfloat *) points; 1053 ctx->EvalMap.Map2Vertex4.Retain = retain; 1054 break; 1031 ctx->EvalMap.Map2Vertex4.v1 = v1; 1032 ctx->EvalMap.Map2Vertex4.v2 = v2; 1033 ctx->EvalMap.Map2Vertex4.dv = 1.0 / (v2 - v1); 1034 if (ctx->EvalMap.Map2Vertex4.Points) 1035 FREE( ctx->EvalMap.Map2Vertex4.Points ); 1036 ctx->EvalMap.Map2Vertex4.Points = pnts; 1037 break; 1055 1038 case GL_MAP2_INDEX: 1056 1039 ctx->EvalMap.Map2Index.Uorder = uorder; 1057 1058 1059 1040 ctx->EvalMap.Map2Index.u1 = u1; 1041 ctx->EvalMap.Map2Index.u2 = u2; 1042 ctx->EvalMap.Map2Index.du = 1.0 / (u2 - u1); 1060 1043 ctx->EvalMap.Map2Index.Vorder = vorder; 1061 ctx->EvalMap.Map2Index.v1 = v1; 1062 ctx->EvalMap.Map2Index.v2 = v2; 1063 ctx->EvalMap.Map2Index.dv = 1.0 / (v2 - v1); 1064 if (ctx->EvalMap.Map2Index.Points 1065 && !ctx->EvalMap.Map2Index.Retain) { 1066 FREE( ctx->EvalMap.Map2Index.Points ); 1067 } 1068 ctx->EvalMap.Map2Index.Retain = retain; 1069 ctx->EvalMap.Map2Index.Points = (GLfloat *) points; 1070 break; 1044 ctx->EvalMap.Map2Index.v1 = v1; 1045 ctx->EvalMap.Map2Index.v2 = v2; 1046 ctx->EvalMap.Map2Index.dv = 1.0 / (v2 - v1); 1047 if (ctx->EvalMap.Map2Index.Points) 1048 FREE( ctx->EvalMap.Map2Index.Points ); 1049 ctx->EvalMap.Map2Index.Points = pnts; 1050 break; 1071 1051 case GL_MAP2_COLOR_4: 1072 1052 ctx->EvalMap.Map2Color4.Uorder = uorder; 1073 1074 1075 1053 ctx->EvalMap.Map2Color4.u1 = u1; 1054 ctx->EvalMap.Map2Color4.u2 = u2; 1055 ctx->EvalMap.Map2Color4.du = 1.0 / (u2 - u1); 1076 1056 ctx->EvalMap.Map2Color4.Vorder = vorder; 1077 ctx->EvalMap.Map2Color4.v1 = v1; 1078 ctx->EvalMap.Map2Color4.v2 = v2; 1079 ctx->EvalMap.Map2Color4.dv = 1.0 / (v2 - v1); 1080 if (ctx->EvalMap.Map2Color4.Points 1081 && !ctx->EvalMap.Map2Color4.Retain) { 1082 FREE( ctx->EvalMap.Map2Color4.Points ); 1083 } 1084 ctx->EvalMap.Map2Color4.Retain = retain; 1085 ctx->EvalMap.Map2Color4.Points = (GLfloat *) points; 1086 break; 1057 ctx->EvalMap.Map2Color4.v1 = v1; 1058 ctx->EvalMap.Map2Color4.v2 = v2; 1059 ctx->EvalMap.Map2Color4.dv = 1.0 / (v2 - v1); 1060 if (ctx->EvalMap.Map2Color4.Points) 1061 FREE( ctx->EvalMap.Map2Color4.Points ); 1062 ctx->EvalMap.Map2Color4.Points = pnts; 1063 break; 1087 1064 case GL_MAP2_NORMAL: 1088 1065 ctx->EvalMap.Map2Normal.Uorder = uorder; 1089 1090 1091 1066 ctx->EvalMap.Map2Normal.u1 = u1; 1067 ctx->EvalMap.Map2Normal.u2 = u2; 1068 ctx->EvalMap.Map2Normal.du = 1.0 / (u2 - u1); 1092 1069 ctx->EvalMap.Map2Normal.Vorder = vorder; 1093 ctx->EvalMap.Map2Normal.v1 = v1; 1094 ctx->EvalMap.Map2Normal.v2 = v2; 1095 ctx->EvalMap.Map2Normal.dv = 1.0 / (v2 - v1); 1096 if (ctx->EvalMap.Map2Normal.Points 1097 && !ctx->EvalMap.Map2Normal.Retain) { 1098 FREE( ctx->EvalMap.Map2Normal.Points ); 1099 } 1100 ctx->EvalMap.Map2Normal.Retain = retain; 1101 ctx->EvalMap.Map2Normal.Points = (GLfloat *) points; 1102 break; 1070 ctx->EvalMap.Map2Normal.v1 = v1; 1071 ctx->EvalMap.Map2Normal.v2 = v2; 1072 ctx->EvalMap.Map2Normal.dv = 1.0 / (v2 - v1); 1073 if (ctx->EvalMap.Map2Normal.Points) 1074 FREE( ctx->EvalMap.Map2Normal.Points ); 1075 ctx->EvalMap.Map2Normal.Points = pnts; 1076 break; 1103 1077 case GL_MAP2_TEXTURE_COORD_1: 1104 1078 ctx->EvalMap.Map2Texture1.Uorder = uorder; 1105 1106 1107 1079 ctx->EvalMap.Map2Texture1.u1 = u1; 1080 ctx->EvalMap.Map2Texture1.u2 = u2; 1081 ctx->EvalMap.Map2Texture1.du = 1.0 / (u2 - u1); 1108 1082 ctx->EvalMap.Map2Texture1.Vorder = vorder; 1109 ctx->EvalMap.Map2Texture1.v1 = v1; 1110 ctx->EvalMap.Map2Texture1.v2 = v2; 1111 ctx->EvalMap.Map2Texture1.dv = 1.0 / (v2 - v1); 1112 if (ctx->EvalMap.Map2Texture1.Points 1113 && !ctx->EvalMap.Map2Texture1.Retain) { 1114 FREE( ctx->EvalMap.Map2Texture1.Points ); 1115 } 1116 ctx->EvalMap.Map2Texture1.Retain = retain; 1117 ctx->EvalMap.Map2Texture1.Points = (GLfloat *) points; 1118 break; 1083 ctx->EvalMap.Map2Texture1.v1 = v1; 1084 ctx->EvalMap.Map2Texture1.v2 = v2; 1085 ctx->EvalMap.Map2Texture1.dv = 1.0 / (v2 - v1); 1086 if (ctx->EvalMap.Map2Texture1.Points) 1087 FREE( ctx->EvalMap.Map2Texture1.Points ); 1088 ctx->EvalMap.Map2Texture1.Points = pnts; 1089 break; 1119 1090 case GL_MAP2_TEXTURE_COORD_2: 1120 1091 ctx->EvalMap.Map2Texture2.Uorder = uorder; 1121 1122 1123 1092 ctx->EvalMap.Map2Texture2.u1 = u1; 1093 ctx->EvalMap.Map2Texture2.u2 = u2; 1094 ctx->EvalMap.Map2Texture2.du = 1.0 / (u2 - u1); 1124 1095 ctx->EvalMap.Map2Texture2.Vorder = vorder; 1125 ctx->EvalMap.Map2Texture2.v1 = v1; 1126 ctx->EvalMap.Map2Texture2.v2 = v2; 1127 ctx->EvalMap.Map2Texture2.dv = 1.0 / (v2 - v1); 1128 if (ctx->EvalMap.Map2Texture2.Points 1129 && !ctx->EvalMap.Map2Texture2.Retain) { 1130 FREE( ctx->EvalMap.Map2Texture2.Points ); 1131 } 1132 ctx->EvalMap.Map2Texture2.Retain = retain; 1133 ctx->EvalMap.Map2Texture2.Points = (GLfloat *) points; 1134 break; 1096 ctx->EvalMap.Map2Texture2.v1 = v1; 1097 ctx->EvalMap.Map2Texture2.v2 = v2; 1098 ctx->EvalMap.Map2Texture2.dv = 1.0 / (v2 - v1); 1099 if (ctx->EvalMap.Map2Texture2.Points) 1100 FREE( ctx->EvalMap.Map2Texture2.Points ); 1101 ctx->EvalMap.Map2Texture2.Points = pnts; 1102 break; 1135 1103 case GL_MAP2_TEXTURE_COORD_3: 1136 1104 ctx->EvalMap.Map2Texture3.Uorder = uorder; 1137 1138 1139 1105 ctx->EvalMap.Map2Texture3.u1 = u1; 1106 ctx->EvalMap.Map2Texture3.u2 = u2; 1107 ctx->EvalMap.Map2Texture3.du = 1.0 / (u2 - u1); 1140 1108 ctx->EvalMap.Map2Texture3.Vorder = vorder; 1141 ctx->EvalMap.Map2Texture3.v1 = v1; 1142 ctx->EvalMap.Map2Texture3.v2 = v2; 1143 ctx->EvalMap.Map2Texture3.dv = 1.0 / (v2 - v1); 1144 if (ctx->EvalMap.Map2Texture3.Points 1145 && !ctx->EvalMap.Map2Texture3.Retain) { 1146 FREE( ctx->EvalMap.Map2Texture3.Points ); 1147 } 1148 ctx->EvalMap.Map2Texture3.Retain = retain; 1149 ctx->EvalMap.Map2Texture3.Points = (GLfloat *) points; 1150 break; 1109 ctx->EvalMap.Map2Texture3.v1 = v1; 1110 ctx->EvalMap.Map2Texture3.v2 = v2; 1111 ctx->EvalMap.Map2Texture3.dv = 1.0 / (v2 - v1); 1112 if (ctx->EvalMap.Map2Texture3.Points) 1113 FREE( ctx->EvalMap.Map2Texture3.Points ); 1114 ctx->EvalMap.Map2Texture3.Points = pnts; 1115 break; 1151 1116 case GL_MAP2_TEXTURE_COORD_4: 1152 1117 ctx->EvalMap.Map2Texture4.Uorder = uorder; 1153 1154 1155 1118 ctx->EvalMap.Map2Texture4.u1 = u1; 1119 ctx->EvalMap.Map2Texture4.u2 = u2; 1120 ctx->EvalMap.Map2Texture4.du = 1.0 / (u2 - u1); 1156 1121 ctx->EvalMap.Map2Texture4.Vorder = vorder; 1157 ctx->EvalMap.Map2Texture4.v1 = v1; 1158 ctx->EvalMap.Map2Texture4.v2 = v2; 1159 ctx->EvalMap.Map2Texture4.dv = 1.0 / (v2 - v1); 1160 if (ctx->EvalMap.Map2Texture4.Points 1161 && !ctx->EvalMap.Map2Texture4.Retain) { 1162 FREE( ctx->EvalMap.Map2Texture4.Points ); 1163 } 1164 ctx->EvalMap.Map2Texture4.Retain = retain; 1165 ctx->EvalMap.Map2Texture4.Points = (GLfloat *) points; 1166 break; 1122 ctx->EvalMap.Map2Texture4.v1 = v1; 1123 ctx->EvalMap.Map2Texture4.v2 = v2; 1124 ctx->EvalMap.Map2Texture4.dv = 1.0 / (v2 - v1); 1125 if (ctx->EvalMap.Map2Texture4.Points) 1126 FREE( ctx->EvalMap.Map2Texture4.Points ); 1127 ctx->EvalMap.Map2Texture4.Points = pnts; 1128 break; 1167 1129 default: 1168 1130 gl_error( ctx, GL_INVALID_ENUM, "glMap2(target)" ); … … 1171 1133 1172 1134 1173 1174 1175 1176 void gl_GetMapdv( GLcontext* ctx, GLenum target, GLenum query, GLdouble *v ) 1177 { 1135 void 1136 _mesa_Map2f( GLenum target, 1137 GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, 1138 GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, 1139 const GLfloat *points) 1140 { 1141 map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, 1142 points, GL_FLOAT); 1143 } 1144 1145 1146 void 1147 _mesa_Map2d( GLenum target, 1148 GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, 1149 GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, 1150 const GLdouble *points ) 1151 { 1152 map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, 1153 points, GL_DOUBLE); 1154 } 1155 1156 1157 1158 void 1159 _mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v ) 1160 { 1161 GET_CURRENT_CONTEXT(ctx); 1178 1162 GLint i, n; 1179 1163 GLfloat *data; … … 1181 1165 switch (query) { 1182 1166 case GL_COEFF: 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1167 switch (target) { 1168 case GL_MAP1_COLOR_4: 1169 data = ctx->EvalMap.Map1Color4.Points; 1170 n = ctx->EvalMap.Map1Color4.Order * 4; 1171 break; 1172 case GL_MAP1_INDEX: 1173 data = ctx->EvalMap.Map1Index.Points; 1174 n = ctx->EvalMap.Map1Index.Order; 1175 break; 1176 case GL_MAP1_NORMAL: 1177 data = ctx->EvalMap.Map1Normal.Points; 1178 n = ctx->EvalMap.Map1Normal.Order * 3; 1179 break; 1180 case GL_MAP1_TEXTURE_COORD_1: 1181 data = ctx->EvalMap.Map1Texture1.Points; 1182 n = ctx->EvalMap.Map1Texture1.Order * 1; 1183 break; 1184 case GL_MAP1_TEXTURE_COORD_2: 1185 data = ctx->EvalMap.Map1Texture2.Points; 1186 n = ctx->EvalMap.Map1Texture2.Order * 2; 1187 break; 1188 case GL_MAP1_TEXTURE_COORD_3: 1189 data = ctx->EvalMap.Map1Texture3.Points; 1190 n = ctx->EvalMap.Map1Texture3.Order * 3; 1191 break; 1192 case GL_MAP1_TEXTURE_COORD_4: 1193 data = ctx->EvalMap.Map1Texture4.Points; 1194 n = ctx->EvalMap.Map1Texture4.Order * 4; 1195 break; 1196 case GL_MAP1_VERTEX_3: 1197 data = ctx->EvalMap.Map1Vertex3.Points; 1198 n = ctx->EvalMap.Map1Vertex3.Order * 3; 1199 break; 1200 case GL_MAP1_VERTEX_4: 1201 data = ctx->EvalMap.Map1Vertex4.Points; 1202 n = ctx->EvalMap.Map1Vertex4.Order * 4; 1203 break; 1204 case GL_MAP2_COLOR_4: 1205 data = ctx->EvalMap.Map2Color4.Points; 1206 n = ctx->EvalMap.Map2Color4.Uorder 1223 1207 * ctx->EvalMap.Map2Color4.Vorder * 4; 1224 1225 1226 1227 1208 break; 1209 case GL_MAP2_INDEX: 1210 data = ctx->EvalMap.Map2Index.Points; 1211 n = ctx->EvalMap.Map2Index.Uorder 1228 1212 * ctx->EvalMap.Map2Index.Vorder; 1229 1230 1231 1232 1213 break; 1214 case GL_MAP2_NORMAL: 1215 data = ctx->EvalMap.Map2Normal.Points; 1216 n = ctx->EvalMap.Map2Normal.Uorder 1233 1217 * ctx->EvalMap.Map2Normal.Vorder * 3; 1234 1235 1236 1237 1218 break; 1219 case GL_MAP2_TEXTURE_COORD_1: 1220 data = ctx->EvalMap.Map2Texture1.Points; 1221 n = ctx->EvalMap.Map2Texture1.Uorder 1238 1222 * ctx->EvalMap.Map2Texture1.Vorder * 1; 1239 1240 1241 1242 1223 break; 1224 case GL_MAP2_TEXTURE_COORD_2: 1225 data = ctx->EvalMap.Map2Texture2.Points; 1226 n = ctx->EvalMap.Map2Texture2.Uorder 1243 1227 * ctx->EvalMap.Map2Texture2.Vorder * 2; 1244 1245 1246 1247 1228 break; 1229 case GL_MAP2_TEXTURE_COORD_3: 1230 data = ctx->EvalMap.Map2Texture3.Points; 1231 n = ctx->EvalMap.Map2Texture3.Uorder 1248 1232 * ctx->EvalMap.Map2Texture3.Vorder * 3; 1249 1250 1251 1252 1233 break; 1234 case GL_MAP2_TEXTURE_COORD_4: 1235 data = ctx->EvalMap.Map2Texture4.Points; 1236 n = ctx->EvalMap.Map2Texture4.Uorder 1253 1237 * ctx->EvalMap.Map2Texture4.Vorder * 4; 1254 1255 1256 1257 1238 break; 1239 case GL_MAP2_VERTEX_3: 1240 data = ctx->EvalMap.Map2Vertex3.Points; 1241 n = ctx->EvalMap.Map2Vertex3.Uorder 1258 1242 * ctx->EvalMap.Map2Vertex3.Vorder * 3; 1259 1260 1261 1262 1243 break; 1244 case GL_MAP2_VERTEX_4: 1245 data = ctx->EvalMap.Map2Vertex4.Points; 1246 n = ctx->EvalMap.Map2Vertex4.Uorder 1263 1247 * ctx->EvalMap.Map2Vertex4.Vorder * 4; 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1248 break; 1249 default: 1250 gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); 1251 return; 1252 } 1253 if (data) { 1254 for (i=0;i<n;i++) { 1255 v[i] = data[i]; 1256 } 1257 } 1274 1258 break; 1275 1259 case GL_ORDER: 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1260 switch (target) { 1261 case GL_MAP1_COLOR_4: 1262 *v = ctx->EvalMap.Map1Color4.Order; 1263 break; 1264 case GL_MAP1_INDEX: 1265 *v = ctx->EvalMap.Map1Index.Order; 1266 break; 1267 case GL_MAP1_NORMAL: 1268 *v = ctx->EvalMap.Map1Normal.Order; 1269 break; 1270 case GL_MAP1_TEXTURE_COORD_1: 1271 *v = ctx->EvalMap.Map1Texture1.Order; 1272 break; 1273 case GL_MAP1_TEXTURE_COORD_2: 1274 *v = ctx->EvalMap.Map1Texture2.Order; 1275 break; 1276 case GL_MAP1_TEXTURE_COORD_3: 1277 *v = ctx->EvalMap.Map1Texture3.Order; 1278 break; 1279 case GL_MAP1_TEXTURE_COORD_4: 1280 *v = ctx->EvalMap.Map1Texture4.Order; 1281 break; 1282 case GL_MAP1_VERTEX_3: 1283 *v = ctx->EvalMap.Map1Vertex3.Order; 1284 break; 1285 case GL_MAP1_VERTEX_4: 1286 *v = ctx->EvalMap.Map1Vertex4.Order; 1287 break; 1288 case GL_MAP2_COLOR_4: 1289 v[0] = ctx->EvalMap.Map2Color4.Uorder; 1290 v[1] = ctx->EvalMap.Map2Color4.Vorder; 1291 break; 1292 case GL_MAP2_INDEX: 1293 v[0] = ctx->EvalMap.Map2Index.Uorder; 1294 v[1] = ctx->EvalMap.Map2Index.Vorder; 1295 break; 1296 case GL_MAP2_NORMAL: 1297 v[0] = ctx->EvalMap.Map2Normal.Uorder; 1298 v[1] = ctx->EvalMap.Map2Normal.Vorder; 1299 break; 1300 case GL_MAP2_TEXTURE_COORD_1: 1301 v[0] = ctx->EvalMap.Map2Texture1.Uorder; 1302 v[1] = ctx->EvalMap.Map2Texture1.Vorder; 1303 break; 1304 case GL_MAP2_TEXTURE_COORD_2: 1305 v[0] = ctx->EvalMap.Map2Texture2.Uorder; 1306 v[1] = ctx->EvalMap.Map2Texture2.Vorder; 1307 break; 1308 case GL_MAP2_TEXTURE_COORD_3: 1309 v[0] = ctx->EvalMap.Map2Texture3.Uorder; 1310 v[1] = ctx->EvalMap.Map2Texture3.Vorder; 1311 break; 1312 case GL_MAP2_TEXTURE_COORD_4: 1313 v[0] = ctx->EvalMap.Map2Texture4.Uorder; 1314 v[1] = ctx->EvalMap.Map2Texture4.Vorder; 1315 break; 1316 case GL_MAP2_VERTEX_3: 1317 v[0] = ctx->EvalMap.Map2Vertex3.Uorder; 1318 v[1] = ctx->EvalMap.Map2Vertex3.Vorder; 1319 break; 1320 case GL_MAP2_VERTEX_4: 1321 v[0] = ctx->EvalMap.Map2Vertex4.Uorder; 1322 v[1] = ctx->EvalMap.Map2Vertex4.Vorder; 1323 break; 1324 default: 1325 gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); 1326 return; 1327 } 1344 1328 break; 1345 1329 case GL_DOMAIN: 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1330 switch (target) { 1331 case GL_MAP1_COLOR_4: 1332 v[0] = ctx->EvalMap.Map1Color4.u1; 1333 v[1] = ctx->EvalMap.Map1Color4.u2; 1334 break; 1335 case GL_MAP1_INDEX: 1336 v[0] = ctx->EvalMap.Map1Index.u1; 1337 v[1] = ctx->EvalMap.Map1Index.u2; 1338 break; 1339 case GL_MAP1_NORMAL: 1340 v[0] = ctx->EvalMap.Map1Normal.u1; 1341 v[1] = ctx->EvalMap.Map1Normal.u2; 1342 break; 1343 case GL_MAP1_TEXTURE_COORD_1: 1344 v[0] = ctx->EvalMap.Map1Texture1.u1; 1345 v[1] = ctx->EvalMap.Map1Texture1.u2; 1346 break; 1347 case GL_MAP1_TEXTURE_COORD_2: 1348 v[0] = ctx->EvalMap.Map1Texture2.u1; 1349 v[1] = ctx->EvalMap.Map1Texture2.u2; 1350 break; 1351 case GL_MAP1_TEXTURE_COORD_3: 1352 v[0] = ctx->EvalMap.Map1Texture3.u1; 1353 v[1] = ctx->EvalMap.Map1Texture3.u2; 1354 break; 1355 case GL_MAP1_TEXTURE_COORD_4: 1356 v[0] = ctx->EvalMap.Map1Texture4.u1; 1357 v[1] = ctx->EvalMap.Map1Texture4.u2; 1358 break; 1359 case GL_MAP1_VERTEX_3: 1360 v[0] = ctx->EvalMap.Map1Vertex3.u1; 1361 v[1] = ctx->EvalMap.Map1Vertex3.u2; 1362 break; 1363 case GL_MAP1_VERTEX_4: 1364 v[0] = ctx->EvalMap.Map1Vertex4.u1; 1365 v[1] = ctx->EvalMap.Map1Vertex4.u2; 1366 break; 1367 case GL_MAP2_COLOR_4: 1368 v[0] = ctx->EvalMap.Map2Color4.u1; 1369 v[1] = ctx->EvalMap.Map2Color4.u2; 1370 v[2] = ctx->EvalMap.Map2Color4.v1; 1371 v[3] = ctx->EvalMap.Map2Color4.v2; 1372 break; 1373 case GL_MAP2_INDEX: 1374 v[0] = ctx->EvalMap.Map2Index.u1; 1375 v[1] = ctx->EvalMap.Map2Index.u2; 1376 v[2] = ctx->EvalMap.Map2Index.v1; 1377 v[3] = ctx->EvalMap.Map2Index.v2; 1378 break; 1379 case GL_MAP2_NORMAL: 1380 v[0] = ctx->EvalMap.Map2Normal.u1; 1381 v[1] = ctx->EvalMap.Map2Normal.u2; 1382 v[2] = ctx->EvalMap.Map2Normal.v1; 1383 v[3] = ctx->EvalMap.Map2Normal.v2; 1384 break; 1385 case GL_MAP2_TEXTURE_COORD_1: 1386 v[0] = ctx->EvalMap.Map2Texture1.u1; 1387 v[1] = ctx->EvalMap.Map2Texture1.u2; 1388 v[2] = ctx->EvalMap.Map2Texture1.v1; 1389 v[3] = ctx->EvalMap.Map2Texture1.v2; 1390 break; 1391 case GL_MAP2_TEXTURE_COORD_2: 1392 v[0] = ctx->EvalMap.Map2Texture2.u1; 1393 v[1] = ctx->EvalMap.Map2Texture2.u2; 1394 v[2] = ctx->EvalMap.Map2Texture2.v1; 1395 v[3] = ctx->EvalMap.Map2Texture2.v2; 1396 break; 1397 case GL_MAP2_TEXTURE_COORD_3: 1398 v[0] = ctx->EvalMap.Map2Texture3.u1; 1399 v[1] = ctx->EvalMap.Map2Texture3.u2; 1400 v[2] = ctx->EvalMap.Map2Texture3.v1; 1401 v[3] = ctx->EvalMap.Map2Texture3.v2; 1402 break; 1403 case GL_MAP2_TEXTURE_COORD_4: 1404 v[0] = ctx->EvalMap.Map2Texture4.u1; 1405 v[1] = ctx->EvalMap.Map2Texture4.u2; 1406 v[2] = ctx->EvalMap.Map2Texture4.v1; 1407 v[3] = ctx->EvalMap.Map2Texture4.v2; 1408 break; 1409 case GL_MAP2_VERTEX_3: 1410 v[0] = ctx->EvalMap.Map2Vertex3.u1; 1411 v[1] = ctx->EvalMap.Map2Vertex3.u2; 1412 v[2] = ctx->EvalMap.Map2Vertex3.v1; 1413 v[3] = ctx->EvalMap.Map2Vertex3.v2; 1414 break; 1415 case GL_MAP2_VERTEX_4: 1416 v[0] = ctx->EvalMap.Map2Vertex4.u1; 1417 v[1] = ctx->EvalMap.Map2Vertex4.u2; 1418 v[2] = ctx->EvalMap.Map2Vertex4.v1; 1419 v[3] = ctx->EvalMap.Map2Vertex4.v2; 1420 break; 1421 default: 1422 gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); 1423 } 1440 1424 break; 1441 1425 default: … … 1445 1429 1446 1430 1447 void gl_GetMapfv( GLcontext* ctx, GLenum target, GLenum query, GLfloat *v ) 1448 { 1431 void 1432 _mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v ) 1433 { 1434 GET_CURRENT_CONTEXT(ctx); 1449 1435 GLint i, n; 1450 1436 GLfloat *data; … … 1452 1438 switch (query) { 1453 1439 case GL_COEFF: 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1440 switch (target) { 1441 case GL_MAP1_COLOR_4: 1442 data = ctx->EvalMap.Map1Color4.Points; 1443 n = ctx->EvalMap.Map1Color4.Order * 4; 1444 break; 1445 case GL_MAP1_INDEX: 1446 data = ctx->EvalMap.Map1Index.Points; 1447 n = ctx->EvalMap.Map1Index.Order; 1448 break; 1449 case GL_MAP1_NORMAL: 1450 data = ctx->EvalMap.Map1Normal.Points; 1451 n = ctx->EvalMap.Map1Normal.Order * 3; 1452 break; 1453 case GL_MAP1_TEXTURE_COORD_1: 1454 data = ctx->EvalMap.Map1Texture1.Points; 1455 n = ctx->EvalMap.Map1Texture1.Order * 1; 1456 break; 1457 case GL_MAP1_TEXTURE_COORD_2: 1458 data = ctx->EvalMap.Map1Texture2.Points; 1459 n = ctx->EvalMap.Map1Texture2.Order * 2; 1460 break; 1461 case GL_MAP1_TEXTURE_COORD_3: 1462 data = ctx->EvalMap.Map1Texture3.Points; 1463 n = ctx->EvalMap.Map1Texture3.Order * 3; 1464 break; 1465 case GL_MAP1_TEXTURE_COORD_4: 1466 data = ctx->EvalMap.Map1Texture4.Points; 1467 n = ctx->EvalMap.Map1Texture4.Order * 4; 1468 break; 1469 case GL_MAP1_VERTEX_3: 1470 data = ctx->EvalMap.Map1Vertex3.Points; 1471 n = ctx->EvalMap.Map1Vertex3.Order * 3; 1472 break; 1473 case GL_MAP1_VERTEX_4: 1474 data = ctx->EvalMap.Map1Vertex4.Points; 1475 n = ctx->EvalMap.Map1Vertex4.Order * 4; 1476 break; 1477 case GL_MAP2_COLOR_4: 1478 data = ctx->EvalMap.Map2Color4.Points; 1479 n = ctx->EvalMap.Map2Color4.Uorder 1494 1480 * ctx->EvalMap.Map2Color4.Vorder * 4; 1495 1496 1497 1498 1481 break; 1482 case GL_MAP2_INDEX: 1483 data = ctx->EvalMap.Map2Index.Points; 1484 n = ctx->EvalMap.Map2Index.Uorder 1499 1485 * ctx->EvalMap.Map2Index.Vorder; 1500 1501 1502 1503 1486 break; 1487 case GL_MAP2_NORMAL: 1488 data = ctx->EvalMap.Map2Normal.Points; 1489 n = ctx->EvalMap.Map2Normal.Uorder 1504 1490 * ctx->EvalMap.Map2Normal.Vorder * 3; 1505 1506 1507 1508 1491 break; 1492 case GL_MAP2_TEXTURE_COORD_1: 1493 data = ctx->EvalMap.Map2Texture1.Points; 1494 n = ctx->EvalMap.Map2Texture1.Uorder 1509 1495 * ctx->EvalMap.Map2Texture1.Vorder * 1; 1510 1511 1512 1513 1496 break; 1497 case GL_MAP2_TEXTURE_COORD_2: 1498 data = ctx->EvalMap.Map2Texture2.Points; 1499 n = ctx->EvalMap.Map2Texture2.Uorder 1514 1500 * ctx->EvalMap.Map2Texture2.Vorder * 2; 1515 1516 1517 1518 1501 break; 1502 case GL_MAP2_TEXTURE_COORD_3: 1503 data = ctx->EvalMap.Map2Texture3.Points; 1504 n = ctx->EvalMap.Map2Texture3.Uorder 1519 1505 * ctx->EvalMap.Map2Texture3.Vorder * 3; 1520 1521 1522 1523 1506 break; 1507 case GL_MAP2_TEXTURE_COORD_4: 1508 data = ctx->EvalMap.Map2Texture4.Points; 1509 n = ctx->EvalMap.Map2Texture4.Uorder 1524 1510 * ctx->EvalMap.Map2Texture4.Vorder * 4; 1525 1526 1527 1528 1511 break; 1512 case GL_MAP2_VERTEX_3: 1513 data = ctx->EvalMap.Map2Vertex3.Points; 1514 n = ctx->EvalMap.Map2Vertex3.Uorder 1529 1515 * ctx->EvalMap.Map2Vertex3.Vorder * 3; 1530 1531 1532 1533 1516 break; 1517 case GL_MAP2_VERTEX_4: 1518 data = ctx->EvalMap.Map2Vertex4.Points; 1519 n = ctx->EvalMap.Map2Vertex4.Uorder 1534 1520 * ctx->EvalMap.Map2Vertex4.Vorder * 4; 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1521 break; 1522 default: 1523 gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); 1524 return; 1525 } 1526 if (data) { 1527 for (i=0;i<n;i++) { 1528 v[i] = data[i]; 1529 } 1530 } 1545 1531 break; 1546 1532 case GL_ORDER: 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1533 switch (target) { 1534 case GL_MAP1_COLOR_4: 1535 *v = ctx->EvalMap.Map1Color4.Order; 1536 break; 1537 case GL_MAP1_INDEX: 1538 *v = ctx->EvalMap.Map1Index.Order; 1539 break; 1540 case GL_MAP1_NORMAL: 1541 *v = ctx->EvalMap.Map1Normal.Order; 1542 break; 1543 case GL_MAP1_TEXTURE_COORD_1: 1544 *v = ctx->EvalMap.Map1Texture1.Order; 1545 break; 1546 case GL_MAP1_TEXTURE_COORD_2: 1547 *v = ctx->EvalMap.Map1Texture2.Order; 1548 break; 1549 case GL_MAP1_TEXTURE_COORD_3: 1550 *v = ctx->EvalMap.Map1Texture3.Order; 1551 break; 1552 case GL_MAP1_TEXTURE_COORD_4: 1553 *v = ctx->EvalMap.Map1Texture4.Order; 1554 break; 1555 case GL_MAP1_VERTEX_3: 1556 *v = ctx->EvalMap.Map1Vertex3.Order; 1557 break; 1558 case GL_MAP1_VERTEX_4: 1559 *v = ctx->EvalMap.Map1Vertex4.Order; 1560 break; 1561 case GL_MAP2_COLOR_4: 1562 v[0] = ctx->EvalMap.Map2Color4.Uorder; 1563 v[1] = ctx->EvalMap.Map2Color4.Vorder; 1564 break; 1565 case GL_MAP2_INDEX: 1566 v[0] = ctx->EvalMap.Map2Index.Uorder; 1567 v[1] = ctx->EvalMap.Map2Index.Vorder; 1568 break; 1569 case GL_MAP2_NORMAL: 1570 v[0] = ctx->EvalMap.Map2Normal.Uorder; 1571 v[1] = ctx->EvalMap.Map2Normal.Vorder; 1572 break; 1573 case GL_MAP2_TEXTURE_COORD_1: 1574 v[0] = ctx->EvalMap.Map2Texture1.Uorder; 1575 v[1] = ctx->EvalMap.Map2Texture1.Vorder; 1576 break; 1577 case GL_MAP2_TEXTURE_COORD_2: 1578 v[0] = ctx->EvalMap.Map2Texture2.Uorder; 1579 v[1] = ctx->EvalMap.Map2Texture2.Vorder; 1580 break; 1581 case GL_MAP2_TEXTURE_COORD_3: 1582 v[0] = ctx->EvalMap.Map2Texture3.Uorder; 1583 v[1] = ctx->EvalMap.Map2Texture3.Vorder; 1584 break; 1585 case GL_MAP2_TEXTURE_COORD_4: 1586 v[0] = ctx->EvalMap.Map2Texture4.Uorder; 1587 v[1] = ctx->EvalMap.Map2Texture4.Vorder; 1588 break; 1589 case GL_MAP2_VERTEX_3: 1590 v[0] = ctx->EvalMap.Map2Vertex3.Uorder; 1591 v[1] = ctx->EvalMap.Map2Vertex3.Vorder; 1592 break; 1593 case GL_MAP2_VERTEX_4: 1594 v[0] = ctx->EvalMap.Map2Vertex4.Uorder; 1595 v[1] = ctx->EvalMap.Map2Vertex4.Vorder; 1596 break; 1597 default: 1598 gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); 1599 return; 1600 } 1615 1601 break; 1616 1602 case GL_DOMAIN: 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1603 switch (target) { 1604 case GL_MAP1_COLOR_4: 1605 v[0] = ctx->EvalMap.Map1Color4.u1; 1606 v[1] = ctx->EvalMap.Map1Color4.u2; 1607 break; 1608 case GL_MAP1_INDEX: 1609 v[0] = ctx->EvalMap.Map1Index.u1; 1610 v[1] = ctx->EvalMap.Map1Index.u2; 1611 break; 1612 case GL_MAP1_NORMAL: 1613 v[0] = ctx->EvalMap.Map1Normal.u1; 1614 v[1] = ctx->EvalMap.Map1Normal.u2; 1615 break; 1616 case GL_MAP1_TEXTURE_COORD_1: 1617 v[0] = ctx->EvalMap.Map1Texture1.u1; 1618 v[1] = ctx->EvalMap.Map1Texture1.u2; 1619 break; 1620 case GL_MAP1_TEXTURE_COORD_2: 1621 v[0] = ctx->EvalMap.Map1Texture2.u1; 1622 v[1] = ctx->EvalMap.Map1Texture2.u2; 1623 break; 1624 case GL_MAP1_TEXTURE_COORD_3: 1625 v[0] = ctx->EvalMap.Map1Texture3.u1; 1626 v[1] = ctx->EvalMap.Map1Texture3.u2; 1627 break; 1628 case GL_MAP1_TEXTURE_COORD_4: 1629 v[0] = ctx->EvalMap.Map1Texture4.u1; 1630 v[1] = ctx->EvalMap.Map1Texture4.u2; 1631 break; 1632 case GL_MAP1_VERTEX_3: 1633 v[0] = ctx->EvalMap.Map1Vertex3.u1; 1634 v[1] = ctx->EvalMap.Map1Vertex3.u2; 1635 break; 1636 case GL_MAP1_VERTEX_4: 1637 v[0] = ctx->EvalMap.Map1Vertex4.u1; 1638 v[1] = ctx->EvalMap.Map1Vertex4.u2; 1639 break; 1640 case GL_MAP2_COLOR_4: 1641 v[0] = ctx->EvalMap.Map2Color4.u1; 1642 v[1] = ctx->EvalMap.Map2Color4.u2; 1643 v[2] = ctx->EvalMap.Map2Color4.v1; 1644 v[3] = ctx->EvalMap.Map2Color4.v2; 1645 break; 1646 case GL_MAP2_INDEX: 1647 v[0] = ctx->EvalMap.Map2Index.u1; 1648 v[1] = ctx->EvalMap.Map2Index.u2; 1649 v[2] = ctx->EvalMap.Map2Index.v1; 1650 v[3] = ctx->EvalMap.Map2Index.v2; 1651 break; 1652 case GL_MAP2_NORMAL: 1653 v[0] = ctx->EvalMap.Map2Normal.u1; 1654 v[1] = ctx->EvalMap.Map2Normal.u2; 1655 v[2] = ctx->EvalMap.Map2Normal.v1; 1656 v[3] = ctx->EvalMap.Map2Normal.v2; 1657 break; 1658 case GL_MAP2_TEXTURE_COORD_1: 1659 v[0] = ctx->EvalMap.Map2Texture1.u1; 1660 v[1] = ctx->EvalMap.Map2Texture1.u2; 1661 v[2] = ctx->EvalMap.Map2Texture1.v1; 1662 v[3] = ctx->EvalMap.Map2Texture1.v2; 1663 break; 1664 case GL_MAP2_TEXTURE_COORD_2: 1665 v[0] = ctx->EvalMap.Map2Texture2.u1; 1666 v[1] = ctx->EvalMap.Map2Texture2.u2; 1667 v[2] = ctx->EvalMap.Map2Texture2.v1; 1668 v[3] = ctx->EvalMap.Map2Texture2.v2; 1669 break; 1670 case GL_MAP2_TEXTURE_COORD_3: 1671 v[0] = ctx->EvalMap.Map2Texture3.u1; 1672 v[1] = ctx->EvalMap.Map2Texture3.u2; 1673 v[2] = ctx->EvalMap.Map2Texture3.v1; 1674 v[3] = ctx->EvalMap.Map2Texture3.v2; 1675 break; 1676 case GL_MAP2_TEXTURE_COORD_4: 1677 v[0] = ctx->EvalMap.Map2Texture4.u1; 1678 v[1] = ctx->EvalMap.Map2Texture4.u2; 1679 v[2] = ctx->EvalMap.Map2Texture4.v1; 1680 v[3] = ctx->EvalMap.Map2Texture4.v2; 1681 break; 1682 case GL_MAP2_VERTEX_3: 1683 v[0] = ctx->EvalMap.Map2Vertex3.u1; 1684 v[1] = ctx->EvalMap.Map2Vertex3.u2; 1685 v[2] = ctx->EvalMap.Map2Vertex3.v1; 1686 v[3] = ctx->EvalMap.Map2Vertex3.v2; 1687 break; 1688 case GL_MAP2_VERTEX_4: 1689 v[0] = ctx->EvalMap.Map2Vertex4.u1; 1690 v[1] = ctx->EvalMap.Map2Vertex4.u2; 1691 v[2] = ctx->EvalMap.Map2Vertex4.v1; 1692 v[3] = ctx->EvalMap.Map2Vertex4.v2; 1693 break; 1694 default: 1695 gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); 1696 } 1711 1697 break; 1712 1698 default: … … 1716 1702 1717 1703 1718 void gl_GetMapiv( GLcontext* ctx, GLenum target, GLenum query, GLint *v ) 1719 { 1704 void 1705 _mesa_GetMapiv( GLenum target, GLenum query, GLint *v ) 1706 { 1707 GET_CURRENT_CONTEXT(ctx); 1720 1708 GLuint i, n; 1721 1709 GLfloat *data; … … 1723 1711 switch (query) { 1724 1712 case GL_COEFF: 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1713 switch (target) { 1714 case GL_MAP1_COLOR_4: 1715 data = ctx->EvalMap.Map1Color4.Points; 1716 n = ctx->EvalMap.Map1Color4.Order * 4; 1717 break; 1718 case GL_MAP1_INDEX: 1719 data = ctx->EvalMap.Map1Index.Points; 1720 n = ctx->EvalMap.Map1Index.Order; 1721 break; 1722 case GL_MAP1_NORMAL: 1723 data = ctx->EvalMap.Map1Normal.Points; 1724 n = ctx->EvalMap.Map1Normal.Order * 3; 1725 break; 1726 case GL_MAP1_TEXTURE_COORD_1: 1727 data = ctx->EvalMap.Map1Texture1.Points; 1728 n = ctx->EvalMap.Map1Texture1.Order * 1; 1729 break; 1730 case GL_MAP1_TEXTURE_COORD_2: 1731 data = ctx->EvalMap.Map1Texture2.Points; 1732 n = ctx->EvalMap.Map1Texture2.Order * 2; 1733 break; 1734 case GL_MAP1_TEXTURE_COORD_3: 1735 data = ctx->EvalMap.Map1Texture3.Points; 1736 n = ctx->EvalMap.Map1Texture3.Order * 3; 1737 break; 1738 case GL_MAP1_TEXTURE_COORD_4: 1739 data = ctx->EvalMap.Map1Texture4.Points; 1740 n = ctx->EvalMap.Map1Texture4.Order * 4; 1741 break; 1742 case GL_MAP1_VERTEX_3: 1743 data = ctx->EvalMap.Map1Vertex3.Points; 1744 n = ctx->EvalMap.Map1Vertex3.Order * 3; 1745 break; 1746 case GL_MAP1_VERTEX_4: 1747 data = ctx->EvalMap.Map1Vertex4.Points; 1748 n = ctx->EvalMap.Map1Vertex4.Order * 4; 1749 break; 1750 case GL_MAP2_COLOR_4: 1751 data = ctx->EvalMap.Map2Color4.Points; 1752 n = ctx->EvalMap.Map2Color4.Uorder 1765 1753 * ctx->EvalMap.Map2Color4.Vorder * 4; 1766 1767 1768 1769 1754 break; 1755 case GL_MAP2_INDEX: 1756 data = ctx->EvalMap.Map2Index.Points; 1757 n = ctx->EvalMap.Map2Index.Uorder 1770 1758 * ctx->EvalMap.Map2Index.Vorder; 1771 1772 1773 1774 1759 break; 1760 case GL_MAP2_NORMAL: 1761 data = ctx->EvalMap.Map2Normal.Points; 1762 n = ctx->EvalMap.Map2Normal.Uorder 1775 1763 * ctx->EvalMap.Map2Normal.Vorder * 3; 1776 1777 1778 1779 1764 break; 1765 case GL_MAP2_TEXTURE_COORD_1: 1766 data = ctx->EvalMap.Map2Texture1.Points; 1767 n = ctx->EvalMap.Map2Texture1.Uorder 1780 1768 * ctx->EvalMap.Map2Texture1.Vorder * 1; 1781 1782 1783 1784 1769 break; 1770 case GL_MAP2_TEXTURE_COORD_2: 1771 data = ctx->EvalMap.Map2Texture2.Points; 1772 n = ctx->EvalMap.Map2Texture2.Uorder 1785 1773 * ctx->EvalMap.Map2Texture2.Vorder * 2; 1786 1787 1788 1789 1774 break; 1775 case GL_MAP2_TEXTURE_COORD_3: 1776 data = ctx->EvalMap.Map2Texture3.Points; 1777 n = ctx->EvalMap.Map2Texture3.Uorder 1790 1778 * ctx->EvalMap.Map2Texture3.Vorder * 3; 1791 1792 1793 1794 1779 break; 1780 case GL_MAP2_TEXTURE_COORD_4: 1781 data = ctx->EvalMap.Map2Texture4.Points; 1782 n = ctx->EvalMap.Map2Texture4.Uorder 1795 1783 * ctx->EvalMap.Map2Texture4.Vorder * 4; 1796 1797 1798 1799 1784 break; 1785 case GL_MAP2_VERTEX_3: 1786 data = ctx->EvalMap.Map2Vertex3.Points; 1787 n = ctx->EvalMap.Map2Vertex3.Uorder 1800 1788 * ctx->EvalMap.Map2Vertex3.Vorder * 3; 1801 1802 1803 1804 1789 break; 1790 case GL_MAP2_VERTEX_4: 1791 data = ctx->EvalMap.Map2Vertex4.Points; 1792 n = ctx->EvalMap.Map2Vertex4.Uorder 1805 1793 * ctx->EvalMap.Map2Vertex4.Vorder * 4; 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1794 break; 1795 default: 1796 gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); 1797 return; 1798 } 1799 if (data) { 1800 for (i=0;i<n;i++) { 1801 v[i] = ROUNDF(data[i]); 1802 } 1803 } 1816 1804 break; 1817 1805 case GL_ORDER: 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1806 switch (target) { 1807 case GL_MAP1_COLOR_4: 1808 *v = ctx->EvalMap.Map1Color4.Order; 1809 break; 1810 case GL_MAP1_INDEX: 1811 *v = ctx->EvalMap.Map1Index.Order; 1812 break; 1813 case GL_MAP1_NORMAL: 1814 *v = ctx->EvalMap.Map1Normal.Order; 1815 break; 1816 case GL_MAP1_TEXTURE_COORD_1: 1817 *v = ctx->EvalMap.Map1Texture1.Order; 1818 break; 1819 case GL_MAP1_TEXTURE_COORD_2: 1820 *v = ctx->EvalMap.Map1Texture2.Order; 1821 break; 1822 case GL_MAP1_TEXTURE_COORD_3: 1823 *v = ctx->EvalMap.Map1Texture3.Order; 1824 break; 1825 case GL_MAP1_TEXTURE_COORD_4: 1826 *v = ctx->EvalMap.Map1Texture4.Order; 1827 break; 1828 case GL_MAP1_VERTEX_3: 1829 *v = ctx->EvalMap.Map1Vertex3.Order; 1830 break; 1831 case GL_MAP1_VERTEX_4: 1832 *v = ctx->EvalMap.Map1Vertex4.Order; 1833 break; 1834 case GL_MAP2_COLOR_4: 1835 v[0] = ctx->EvalMap.Map2Color4.Uorder; 1836 v[1] = ctx->EvalMap.Map2Color4.Vorder; 1837 break; 1838 case GL_MAP2_INDEX: 1839 v[0] = ctx->EvalMap.Map2Index.Uorder; 1840 v[1] = ctx->EvalMap.Map2Index.Vorder; 1841 break; 1842 case GL_MAP2_NORMAL: 1843 v[0] = ctx->EvalMap.Map2Normal.Uorder; 1844 v[1] = ctx->EvalMap.Map2Normal.Vorder; 1845 break; 1846 case GL_MAP2_TEXTURE_COORD_1: 1847 v[0] = ctx->EvalMap.Map2Texture1.Uorder; 1848 v[1] = ctx->EvalMap.Map2Texture1.Vorder; 1849 break; 1850 case GL_MAP2_TEXTURE_COORD_2: 1851 v[0] = ctx->EvalMap.Map2Texture2.Uorder; 1852 v[1] = ctx->EvalMap.Map2Texture2.Vorder; 1853 break; 1854 case GL_MAP2_TEXTURE_COORD_3: 1855 v[0] = ctx->EvalMap.Map2Texture3.Uorder; 1856 v[1] = ctx->EvalMap.Map2Texture3.Vorder; 1857 break; 1858 case GL_MAP2_TEXTURE_COORD_4: 1859 v[0] = ctx->EvalMap.Map2Texture4.Uorder; 1860 v[1] = ctx->EvalMap.Map2Texture4.Vorder; 1861 break; 1862 case GL_MAP2_VERTEX_3: 1863 v[0] = ctx->EvalMap.Map2Vertex3.Uorder; 1864 v[1] = ctx->EvalMap.Map2Vertex3.Vorder; 1865 break; 1866 case GL_MAP2_VERTEX_4: 1867 v[0] = ctx->EvalMap.Map2Vertex4.Uorder; 1868 v[1] = ctx->EvalMap.Map2Vertex4.Vorder; 1869 break; 1870 default: 1871 gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); 1872 return; 1873 } 1886 1874 break; 1887 1875 case GL_DOMAIN: 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1876 switch (target) { 1877 case GL_MAP1_COLOR_4: 1878 v[0] = ROUNDF(ctx->EvalMap.Map1Color4.u1); 1879 v[1] = ROUNDF(ctx->EvalMap.Map1Color4.u2); 1880 break; 1881 case GL_MAP1_INDEX: 1882 v[0] = ROUNDF(ctx->EvalMap.Map1Index.u1); 1883 v[1] = ROUNDF(ctx->EvalMap.Map1Index.u2); 1884 break; 1885 case GL_MAP1_NORMAL: 1886 v[0] = ROUNDF(ctx->EvalMap.Map1Normal.u1); 1887 v[1] = ROUNDF(ctx->EvalMap.Map1Normal.u2); 1888 break; 1889 case GL_MAP1_TEXTURE_COORD_1: 1890 v[0] = ROUNDF(ctx->EvalMap.Map1Texture1.u1); 1891 v[1] = ROUNDF(ctx->EvalMap.Map1Texture1.u2); 1892 break; 1893 case GL_MAP1_TEXTURE_COORD_2: 1894 v[0] = ROUNDF(ctx->EvalMap.Map1Texture2.u1); 1895 v[1] = ROUNDF(ctx->EvalMap.Map1Texture2.u2); 1896 break; 1897 case GL_MAP1_TEXTURE_COORD_3: 1898 v[0] = ROUNDF(ctx->EvalMap.Map1Texture3.u1); 1899 v[1] = ROUNDF(ctx->EvalMap.Map1Texture3.u2); 1900 break; 1901 case GL_MAP1_TEXTURE_COORD_4: 1902 v[0] = ROUNDF(ctx->EvalMap.Map1Texture4.u1); 1903 v[1] = ROUNDF(ctx->EvalMap.Map1Texture4.u2); 1904 break; 1905 case GL_MAP1_VERTEX_3: 1906 v[0] = ROUNDF(ctx->EvalMap.Map1Vertex3.u1); 1907 v[1] = ROUNDF(ctx->EvalMap.Map1Vertex3.u2); 1908 break; 1909 case GL_MAP1_VERTEX_4: 1910 v[0] = ROUNDF(ctx->EvalMap.Map1Vertex4.u1); 1911 v[1] = ROUNDF(ctx->EvalMap.Map1Vertex4.u2); 1912 break; 1913 case GL_MAP2_COLOR_4: 1914 v[0] = ROUNDF(ctx->EvalMap.Map2Color4.u1); 1915 v[1] = ROUNDF(ctx->EvalMap.Map2Color4.u2); 1916 v[2] = ROUNDF(ctx->EvalMap.Map2Color4.v1); 1917 v[3] = ROUNDF(ctx->EvalMap.Map2Color4.v2); 1918 break; 1919 case GL_MAP2_INDEX: 1920 v[0] = ROUNDF(ctx->EvalMap.Map2Index.u1); 1921 v[1] = ROUNDF(ctx->EvalMap.Map2Index.u2); 1922 v[2] = ROUNDF(ctx->EvalMap.Map2Index.v1); 1923 v[3] = ROUNDF(ctx->EvalMap.Map2Index.v2); 1924 break; 1925 case GL_MAP2_NORMAL: 1926 v[0] = ROUNDF(ctx->EvalMap.Map2Normal.u1); 1927 v[1] = ROUNDF(ctx->EvalMap.Map2Normal.u2); 1928 v[2] = ROUNDF(ctx->EvalMap.Map2Normal.v1); 1929 v[3] = ROUNDF(ctx->EvalMap.Map2Normal.v2); 1930 break; 1931 case GL_MAP2_TEXTURE_COORD_1: 1932 v[0] = ROUNDF(ctx->EvalMap.Map2Texture1.u1); 1933 v[1] = ROUNDF(ctx->EvalMap.Map2Texture1.u2); 1934 v[2] = ROUNDF(ctx->EvalMap.Map2Texture1.v1); 1935 v[3] = ROUNDF(ctx->EvalMap.Map2Texture1.v2); 1936 break; 1937 case GL_MAP2_TEXTURE_COORD_2: 1938 v[0] = ROUNDF(ctx->EvalMap.Map2Texture2.u1); 1939 v[1] = ROUNDF(ctx->EvalMap.Map2Texture2.u2); 1940 v[2] = ROUNDF(ctx->EvalMap.Map2Texture2.v1); 1941 v[3] = ROUNDF(ctx->EvalMap.Map2Texture2.v2); 1942 break; 1943 case GL_MAP2_TEXTURE_COORD_3: 1944 v[0] = ROUNDF(ctx->EvalMap.Map2Texture3.u1); 1945 v[1] = ROUNDF(ctx->EvalMap.Map2Texture3.u2); 1946 v[2] = ROUNDF(ctx->EvalMap.Map2Texture3.v1); 1947 v[3] = ROUNDF(ctx->EvalMap.Map2Texture3.v2); 1948 break; 1949 case GL_MAP2_TEXTURE_COORD_4: 1950 v[0] = ROUNDF(ctx->EvalMap.Map2Texture4.u1); 1951 v[1] = ROUNDF(ctx->EvalMap.Map2Texture4.u2); 1952 v[2] = ROUNDF(ctx->EvalMap.Map2Texture4.v1); 1953 v[3] = ROUNDF(ctx->EvalMap.Map2Texture4.v2); 1954 break; 1955 case GL_MAP2_VERTEX_3: 1956 v[0] = ROUNDF(ctx->EvalMap.Map2Vertex3.u1); 1957 v[1] = ROUNDF(ctx->EvalMap.Map2Vertex3.u2); 1958 v[2] = ROUNDF(ctx->EvalMap.Map2Vertex3.v1); 1959 v[3] = ROUNDF(ctx->EvalMap.Map2Vertex3.v2); 1960 break; 1961 case GL_MAP2_VERTEX_4: 1962 v[0] = ROUNDF(ctx->EvalMap.Map2Vertex4.u1); 1963 v[1] = ROUNDF(ctx->EvalMap.Map2Vertex4.u2); 1964 v[2] = ROUNDF(ctx->EvalMap.Map2Vertex4.v1); 1965 v[3] = ROUNDF(ctx->EvalMap.Map2Vertex4.v2); 1966 break; 1967 default: 1968 gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); 1969 } 1982 1970 break; 1983 1971 default: … … 1989 1977 1990 1978 static void eval_points1( GLfloat outcoord[][4], 1991 1992 1993 1994 1979 GLfloat coord[][4], 1980 const GLuint *flags, 1981 GLuint start, 1982 GLfloat du, GLfloat u1 ) 1995 1983 { 1996 1984 GLuint i; 1997 1985 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 1998 1986 if (flags[i] & VERT_EVAL_P1) 1999 1987 outcoord[i][0] = coord[i][0] * du + u1; 2000 1988 else if (flags[i] & VERT_EVAL_ANY) { 2001 2002 1989 outcoord[i][0] = coord[i][0]; 1990 outcoord[i][1] = coord[i][1]; 2003 1991 } 2004 1992 } 2005 1993 2006 1994 static void eval_points2( GLfloat outcoord[][4], 2007 2008 2009 2010 2011 1995 GLfloat coord[][4], 1996 const GLuint *flags, 1997 GLuint start, 1998 GLfloat du, GLfloat u1, 1999 GLfloat dv, GLfloat v1 ) 2012 2000 { 2013 2001 GLuint i; 2014 2002 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2015 2003 if (flags[i] & VERT_EVAL_P2) { 2016 2017 2004 outcoord[i][0] = coord[i][0] * du + u1; 2005 outcoord[i][1] = coord[i][1] * dv + v1; 2018 2006 } else if (flags[i] & VERT_EVAL_ANY) { 2019 2020 2007 outcoord[i][0] = coord[i][0]; 2008 outcoord[i][1] = coord[i][1]; 2021 2009 } 2022 2010 } … … 2024 2012 2025 2013 static const GLubyte dirty_flags[5] = { 2026 0, 2014 0, /* not possible */ 2027 2015 VEC_DIRTY_0, 2028 2016 VEC_DIRTY_1, … … 2033 2021 2034 2022 static GLvector4f *eval1_4f( GLvector4f *dest, 2035 2036 2037 2038 2039 2023 GLfloat coord[][4], 2024 const GLuint *flags, 2025 GLuint start, 2026 GLuint dimension, 2027 struct gl_1d_map *map ) 2040 2028 { 2041 2029 const GLfloat u1 = map->u1; … … 2046 2034 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2047 2035 if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2048 2049 2050 2036 GLfloat u = (coord[i][0] - u1) * du; 2037 ASSIGN_4V(to[i], 0,0,0,1); 2038 horner_bezier_curve(map->Points, to[i], u, dimension, map->Order); 2051 2039 } 2052 2040 … … 2060 2048 2061 2049 static GLvector1ui *eval1_1ui( GLvector1ui *dest, 2062 2063 2064 2065 2050 GLfloat coord[][4], 2051 const GLuint *flags, 2052 GLuint start, 2053 struct gl_1d_map *map ) 2066 2054 { 2067 2055 const GLfloat u1 = map->u1; … … 2072 2060 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2073 2061 if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2074 2075 2076 2077 2062 GLfloat u = (coord[i][0] - u1) * du; 2063 GLfloat tmp; 2064 horner_bezier_curve(map->Points, &tmp, u, 1, map->Order); 2065 to[i] = (GLuint) (GLint) tmp; 2078 2066 } 2079 2067 … … 2084 2072 2085 2073 static GLvector3f *eval1_norm( GLvector3f *dest, 2086 2087 2088 2089 2074 GLfloat coord[][4], 2075 GLuint *flags, /* not const */ 2076 GLuint start, 2077 struct gl_1d_map *map ) 2090 2078 { 2091 2079 const GLfloat u1 = map->u1; … … 2096 2084 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2097 2085 if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2098 2099 2100 2086 GLfloat u = (coord[i][0] - u1) * du; 2087 horner_bezier_curve(map->Points, to[i], u, 3, map->Order); 2088 flags[i+1] |= VERT_NORM; /* reset */ 2101 2089 } 2102 2090 … … 2107 2095 2108 2096 static GLvector4ub *eval1_color( GLvector4ub *dest, 2109 2110 2111 2112 2097 GLfloat coord[][4], 2098 GLuint *flags, /* not const */ 2099 GLuint start, 2100 struct gl_1d_map *map ) 2113 2101 { 2114 2102 const GLfloat u1 = map->u1; … … 2119 2107 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2120 2108 if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2121 2122 2123 2124 2125 2109 GLfloat u = (coord[i][0] - u1) * du; 2110 GLfloat fcolor[4]; 2111 horner_bezier_curve(map->Points, fcolor, u, 4, map->Order); 2112 FLOAT_RGBA_TO_UBYTE_RGBA(to[i], fcolor); 2113 flags[i+1] |= VERT_RGBA; /* reset */ 2126 2114 } 2127 2115 … … 2135 2123 2136 2124 static GLvector4f *eval2_obj_norm( GLvector4f *obj_ptr, 2137 2138 2139 2140 2141 2142 2125 GLvector3f *norm_ptr, 2126 GLfloat coord[][4], 2127 GLuint *flags, 2128 GLuint start, 2129 GLuint dimension, 2130 struct gl_2d_map *map ) 2143 2131 { 2144 2132 const GLfloat u1 = map->u1; … … 2152 2140 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2153 2141 if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2142 GLfloat u = (coord[i][0] - u1) * du; 2143 GLfloat v = (coord[i][1] - v1) * dv; 2144 GLfloat du[4], dv[4]; 2145 2146 ASSIGN_4V(obj[i], 0,0,0,1); 2147 de_casteljau_surf(map->Points, obj[i], du, dv, u, v, dimension, 2148 map->Uorder, map->Vorder); 2149 2150 CROSS3(normal[i], du, dv); 2151 NORMALIZE_3FV(normal[i]); 2152 flags[i+1] |= VERT_NORM; 2165 2153 } 2166 2154 … … 2174 2162 2175 2163 static GLvector4f *eval2_4f( GLvector4f *dest, 2176 2177 2178 2179 2180 2164 GLfloat coord[][4], 2165 const GLuint *flags, 2166 GLuint start, 2167 GLuint dimension, 2168 struct gl_2d_map *map ) 2181 2169 { 2182 2170 const GLfloat u1 = map->u1; … … 2189 2177 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2190 2178 if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2191 2192 2193 2194 2179 GLfloat u = (coord[i][0] - u1) * du; 2180 GLfloat v = (coord[i][1] - v1) * dv; 2181 horner_bezier_surf(map->Points, to[i], u, v, dimension, 2182 map->Uorder, map->Vorder); 2195 2183 } 2196 2184 … … 2204 2192 2205 2193 static GLvector3f *eval2_norm( GLvector3f *dest, 2206 2207 2208 2209 2194 GLfloat coord[][4], 2195 GLuint *flags, 2196 GLuint start, 2197 struct gl_2d_map *map ) 2210 2198 { 2211 2199 const GLfloat u1 = map->u1; … … 2218 2206 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2219 2207 if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2220 2221 2222 2223 2224 2208 GLfloat u = (coord[i][0] - u1) * du; 2209 GLfloat v = (coord[i][1] - v1) * dv; 2210 horner_bezier_surf(map->Points, to[i], u, v, 3, 2211 map->Uorder, map->Vorder); 2212 flags[i+1] |= VERT_NORM; /* reset */ 2225 2213 } 2226 2214 … … 2232 2220 2233 2221 static GLvector1ui *eval2_1ui( GLvector1ui *dest, 2234 2235 2236 2237 2222 GLfloat coord[][4], 2223 const GLuint *flags, 2224 GLuint start, 2225 struct gl_2d_map *map ) 2238 2226 { 2239 2227 const GLfloat u1 = map->u1; … … 2246 2234 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2247 2235 if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2248 2249 2250 2251 2252 2253 2254 2236 GLfloat u = (coord[i][0] - u1) * du; 2237 GLfloat v = (coord[i][1] - v1) * dv; 2238 GLfloat tmp; 2239 horner_bezier_surf(map->Points, &tmp, u, v, 1, 2240 map->Uorder, map->Vorder); 2241 2242 to[i] = (GLuint) (GLint) tmp; 2255 2243 } 2256 2244 … … 2263 2251 2264 2252 static GLvector4ub *eval2_color( GLvector4ub *dest, 2265 2266 2267 2268 2253 GLfloat coord[][4], 2254 GLuint *flags, 2255 GLuint start, 2256 struct gl_2d_map *map ) 2269 2257 { 2270 2258 const GLfloat u1 = map->u1; … … 2277 2265 for (i = start ; !(flags[i] & VERT_END_VB) ; i++) 2278 2266 if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2279 2280 2281 2282 2283 2284 2285 2267 GLfloat u = (coord[i][0] - u1) * du; 2268 GLfloat v = (coord[i][1] - v1) * dv; 2269 GLfloat fcolor[4]; 2270 horner_bezier_surf(map->Points, fcolor, u, v, 4, 2271 map->Uorder, map->Vorder); 2272 FLOAT_RGBA_TO_UBYTE_RGBA(to[i], fcolor); 2273 flags[i+1] |= VERT_RGBA; /* reset */ 2286 2274 } 2287 2275 … … 2293 2281 2294 2282 static GLvector4f *copy_4f( GLvector4f *out, CONST GLvector4f *in, 2295 2296 2283 const GLuint *flags, 2284 GLuint start ) 2297 2285 { 2298 2286 GLfloat (*to)[4] = out->data; … … 2302 2290 for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) 2303 2291 if (!(flags[i] & VERT_EVAL_ANY)) 2304 2292 COPY_4FV( to[i], from[i] ); 2305 2293 2306 2294 out->start = VEC_ELT(out, GLfloat, start); … … 2309 2297 2310 2298 static GLvector3f *copy_3f( GLvector3f *out, CONST GLvector3f *in, 2311 2312 2299 const GLuint *flags, 2300 GLuint start ) 2313 2301 { 2314 2302 GLfloat (*to)[3] = out->data; … … 2318 2306 for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) 2319 2307 if (!(flags[i] & VERT_EVAL_ANY)) 2320 2308 COPY_3V( to[i], from[i] ); 2321 2309 2322 2310 out->start = VEC_ELT(out, GLfloat, start); … … 2325 2313 2326 2314 static GLvector4ub *copy_4ub( GLvector4ub *out, 2327 2328 2329 2315 CONST GLvector4ub *in, 2316 const GLuint *flags, 2317 GLuint start ) 2330 2318 { 2331 2319 GLubyte (*to)[4] = out->data; … … 2335 2323 for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) 2336 2324 if (!(flags[i] & VERT_EVAL_ANY)) 2337 2325 COPY_4UBV( to[i], from[i] ); 2338 2326 2339 2327 out->start = VEC_ELT(out, GLubyte, start); … … 2342 2330 2343 2331 static GLvector1ui *copy_1ui( GLvector1ui *out, 2344 2345 2346 2332 CONST GLvector1ui *in, 2333 const GLuint *flags, 2334 GLuint start ) 2347 2335 { 2348 2336 GLuint *to = out->data; … … 2352 2340 for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) 2353 2341 if (!(flags[i] & VERT_EVAL_ANY)) 2354 2342 to[i] = from[i]; 2355 2343 2356 2344 out->start = VEC_ELT(out, GLuint, start); … … 2419 2407 { 2420 2408 eval_points1( IM->Obj, coord, flags, IM->Start, 2421 2422 2409 ctx->Eval.MapGrid1du, 2410 ctx->Eval.MapGrid1u1); 2423 2411 2424 2412 coord = IM->Obj; … … 2428 2416 { 2429 2417 eval_points2( IM->Obj, coord, flags, IM->Start, 2430 2431 2432 2433 2418 ctx->Eval.MapGrid2du, 2419 ctx->Eval.MapGrid2u1, 2420 ctx->Eval.MapGrid2dv, 2421 ctx->Eval.MapGrid2v1 ); 2434 2422 2435 2423 coord = IM->Obj; … … 2444 2432 2445 2433 if (ctx->Eval.Map1Index && any_eval1) 2446 2447 2434 VB->IndexPtr = eval1_1ui( out_index, coord, flags, IM->Start, 2435 &ctx->EvalMap.Map1Index ); 2448 2436 2449 2437 if (ctx->Eval.Map2Index && any_eval2) 2450 2451 2452 2438 VB->IndexPtr = eval2_1ui( out_index, coord, flags, IM->Start, 2439 &ctx->EvalMap.Map2Index ); 2440 2453 2441 if (VB->IndexPtr != in_index) { 2454 2455 2456 2442 new_flags |= VERT_INDEX; 2443 if (!all_eval) 2444 VB->IndexPtr = copy_1ui( out_index, in_index, flags, IM->Start ); 2457 2445 } 2458 2446 } … … 2464 2452 2465 2453 if (ctx->Eval.Map1Color4 && any_eval1) 2466 2467 2454 VB->ColorPtr = eval1_color( out_color, coord, flags, IM->Start, 2455 &ctx->EvalMap.Map1Color4 ); 2468 2456 2469 2457 if (ctx->Eval.Map2Color4 && any_eval2) 2470 2471 2472 2458 VB->ColorPtr = eval2_color( out_color, coord, flags, IM->Start, 2459 &ctx->EvalMap.Map2Color4 ); 2460 2473 2461 if (VB->ColorPtr != in_color) { 2474 2475 2476 2462 new_flags |= VERT_RGBA; 2463 if (!all_eval) 2464 VB->ColorPtr = copy_4ub( out_color, in_color, flags, IM->Start ); 2477 2465 } 2478 2466 … … 2487 2475 2488 2476 if (ctx->Eval.Map1Normal && any_eval1) 2489 2490 2477 VB->NormalPtr = eval1_norm( out_normal, coord, flags, IM->Start, 2478 &ctx->EvalMap.Map1Normal ); 2491 2479 2492 2480 if (ctx->Eval.Map2Normal && any_eval2) 2493 2494 2495 2481 VB->NormalPtr = eval2_norm( out_normal, coord, flags, IM->Start, 2482 &ctx->EvalMap.Map2Normal ); 2483 2496 2484 if (VB->NormalPtr != in_normal) { 2497 2498 2499 2485 new_flags |= VERT_NORM; 2486 if (!all_eval) 2487 VB->NormalPtr = copy_3f( out_normal, in_normal, flags, IM->Start ); 2500 2488 } 2501 2489 } … … 2509 2497 2510 2498 if (any_eval1) { 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2499 if (ctx->Eval.Map1TextureCoord4) 2500 tc = eval1_4f( out, coord, flags, IM->Start, 2501 4, &ctx->EvalMap.Map1Texture4); 2502 else if (ctx->Eval.Map1TextureCoord3) 2503 tc = eval1_4f( out, coord, flags, IM->Start, 3, 2504 &ctx->EvalMap.Map1Texture3); 2505 else if (ctx->Eval.Map1TextureCoord2) 2506 tc = eval1_4f( out, coord, flags, IM->Start, 2, 2507 &ctx->EvalMap.Map1Texture2); 2508 else if (ctx->Eval.Map1TextureCoord1) 2509 tc = eval1_4f( out, coord, flags, IM->Start, 1, 2510 &ctx->EvalMap.Map1Texture1); 2523 2511 } 2524 2512 2525 2513 if (any_eval2) { 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2514 if (ctx->Eval.Map2TextureCoord4) 2515 tc = eval2_4f( out, coord, flags, IM->Start, 2516 4, &ctx->EvalMap.Map2Texture4); 2517 else if (ctx->Eval.Map2TextureCoord3) 2518 tc = eval2_4f( out, coord, flags, IM->Start, 2519 3, &ctx->EvalMap.Map2Texture3); 2520 else if (ctx->Eval.Map2TextureCoord2) 2521 tc = eval2_4f( out, coord, flags, IM->Start, 2522 2, &ctx->EvalMap.Map2Texture2); 2523 else if (ctx->Eval.Map2TextureCoord1) 2524 tc = eval2_4f( out, coord, flags, IM->Start, 2525 1, &ctx->EvalMap.Map2Texture1); 2538 2526 } 2539 2527 2540 2528 if (tc != in) { 2541 2542 2543 2529 new_flags |= VERT_TEX_ANY(0); /* fix for sizes.. */ 2530 if (!all_eval) 2531 tc = copy_4f( out, in, flags, IM->Start ); 2544 2532 } 2545 2533 … … 2554 2542 2555 2543 if (any_eval1) { 2556 2557 2558 2559 2560 2561 2544 if (ctx->Eval.Map1Vertex4) 2545 obj = eval1_4f( out, coord, flags, IM->Start, 2546 4, &ctx->EvalMap.Map1Vertex4); 2547 else 2548 obj = eval1_4f( out, coord, flags, IM->Start, 2549 3, &ctx->EvalMap.Map1Vertex3); 2562 2550 } 2563 2551 2564 2552 if (any_eval2) { 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2553 if (ctx->Eval.Map2Vertex4) 2554 { 2555 if (ctx->Eval.AutoNormal && (req & VERT_NORM)) 2556 obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, IM->Start, 2557 4, &ctx->EvalMap.Map2Vertex4 ); 2558 else 2559 obj = eval2_4f( out, coord, flags, IM->Start, 2560 4, &ctx->EvalMap.Map2Vertex4); 2561 } 2562 else if (ctx->Eval.Map2Vertex3) 2563 { 2564 if (ctx->Eval.AutoNormal && (req & VERT_NORM)) 2565 obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, IM->Start, 2566 3, &ctx->EvalMap.Map2Vertex3 ); 2567 else 2568 obj = eval2_4f( out, coord, flags, IM->Start, 2569 3, &ctx->EvalMap.Map2Vertex3 ); 2570 } 2583 2571 } 2584 2572 2585 2573 if (obj != in && !all_eval) 2586 2574 obj = copy_4f( out, in, flags, IM->Start ); 2587 2575 2588 2576 VB->ObjPtr = obj; … … 2596 2584 2597 2585 if (!flags) { 2598 2599 2586 VB->EvaluatedFlags = (GLuint *) MALLOC(VB->Size * sizeof(GLuint)); 2587 flags = VB->Flag = VB->EvaluatedFlags; 2600 2588 } 2601 2589 2602 2590 if (all_eval) { 2603 2604 2591 for (i = 0 ; i < count ; i++) 2592 flags[i] = oldflags[i] | new_flags; 2605 2593 } else { 2606 GLuint andflag = ~0; 2607 for (i = 0 ; i < count ; i++) { 2608 if (oldflags[i] & VERT_EVAL_ANY) 2609 flags[i] = oldflags[i] | new_flags; 2610 andflag &= flags[i]; 2611 } 2612 } 2613 } 2614 } 2615 2616 2617 void gl_MapGrid1f( GLcontext* ctx, GLint un, GLfloat u1, GLfloat u2 ) 2618 { 2594 GLuint andflag = ~0; 2595 for (i = 0 ; i < count ; i++) { 2596 if (oldflags[i] & VERT_EVAL_ANY) 2597 flags[i] = oldflags[i] | new_flags; 2598 andflag &= flags[i]; 2599 } 2600 } 2601 } 2602 } 2603 2604 2605 void 2606 _mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 ) 2607 { 2608 GET_CURRENT_CONTEXT(ctx); 2619 2609 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMapGrid1f"); 2620 2610 … … 2630 2620 2631 2621 2632 void gl_MapGrid2f( GLcontext* ctx, GLint un, GLfloat u1, GLfloat u2, 2633 GLint vn, GLfloat v1, GLfloat v2 ) 2634 { 2622 void 2623 _mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 ) 2624 { 2625 _mesa_MapGrid1f( un, u1, u2 ); 2626 } 2627 2628 2629 void 2630 _mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2, 2631 GLint vn, GLfloat v1, GLfloat v2 ) 2632 { 2633 GET_CURRENT_CONTEXT(ctx); 2635 2634 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMapGrid2f"); 2636 2635 if (un<1) { … … 2653 2652 2654 2653 2655 2656 void gl_EvalMesh1( GLcontext* ctx, GLenum mode, GLint i1, GLint i2 ) 2657 { 2654 void 2655 _mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2, 2656 GLint vn, GLdouble v1, GLdouble v2 ) 2657 { 2658 _mesa_MapGrid2f( un, u1, u2, vn, v1, v2 ); 2659 } 2660 2661 2662 2663 2664 /* KW: If are compiling, we don't know whether eval will produce a 2665 * vertex when it is run in the future. If this is pure immediate 2666 * mode, eval is a noop if neither vertex map is enabled. 2667 * 2668 * Thus we need to have a check in the display list code or 2669 * elsewhere for eval(1,2) vertices in the case where 2670 * map(1,2)_vertex is disabled, and to purge those vertices from 2671 * the vb. This is currently done 2672 * via modifications to the cull_vb and render_vb operations, and 2673 * by using the existing cullmask mechanism for all other operations. 2674 */ 2675 2676 2677 /* KW: Because the eval values don't become 'current', fixup will flow 2678 * through these vertices, and then evaluation will write on top 2679 * of the fixup results. 2680 * 2681 * This is a little inefficient, but at least it is correct. This 2682 * could be short-circuited in the case where all vertices are 2683 * eval-vertices, or more generally by a cullmask in fixup. 2684 * 2685 * Note: using Obj to hold eval coord data. This data is actually 2686 * transformed if eval is disabled. But disabling eval & sending 2687 * eval coords is stupid, right? 2688 */ 2689 2690 2691 #define EVALCOORD1(IM, x) \ 2692 { \ 2693 GLuint count = IM->Count++; \ 2694 IM->Flag[count] |= VERT_EVAL_C1; \ 2695 ASSIGN_4V(IM->Obj[count], x, 0, 0, 1); \ 2696 if (count == VB_MAX-1) \ 2697 IM->maybe_transform_vb( IM ); \ 2698 } 2699 2700 #define EVALCOORD2(IM, x, y) \ 2701 { \ 2702 GLuint count = IM->Count++; \ 2703 IM->Flag[count] |= VERT_EVAL_C2; \ 2704 ASSIGN_4V(IM->Obj[count], x, y, 0, 1); \ 2705 if (count == VB_MAX-1) \ 2706 IM->maybe_transform_vb( IM ); \ 2707 } 2708 2709 #define EVALPOINT1(IM, x) \ 2710 { \ 2711 GLuint count = IM->Count++; \ 2712 IM->Flag[count] |= VERT_EVAL_P1; \ 2713 ASSIGN_4V(IM->Obj[count], x, 0, 0, 1); \ 2714 if (count == VB_MAX-1) \ 2715 IM->maybe_transform_vb( IM ); \ 2716 } 2717 2718 #define EVALPOINT2(IM, x, y) \ 2719 { \ 2720 GLuint count = IM->Count++; \ 2721 IM->Flag[count] |= VERT_EVAL_P2; \ 2722 ASSIGN_4V(IM->Obj[count], x, y, 0, 1); \ 2723 if (count == VB_MAX-1) \ 2724 IM->maybe_transform_vb( IM ); \ 2725 } 2726 2727 2728 /* Lame internal function: 2729 */ 2730 static void 2731 eval_coord1f( GLcontext *CC, GLfloat u ) 2732 { 2733 struct immediate *i = CC->input; 2734 EVALCOORD1( i, u ); 2735 } 2736 2737 2738 void 2739 _mesa_EvalCoord1d( GLdouble u ) 2740 { 2741 GET_IMMEDIATE; 2742 EVALCOORD1( IM, (GLfloat) u ); 2743 } 2744 2745 2746 void 2747 _mesa_EvalCoord1f( GLfloat u ) 2748 { 2749 GET_IMMEDIATE; 2750 EVALCOORD1( IM, u ); 2751 } 2752 2753 2754 void 2755 _mesa_EvalCoord1dv( const GLdouble *u ) 2756 { 2757 GET_IMMEDIATE; 2758 EVALCOORD1( IM, (GLfloat) *u ); 2759 } 2760 2761 2762 void 2763 _mesa_EvalCoord1fv( const GLfloat *u ) 2764 { 2765 GET_IMMEDIATE; 2766 EVALCOORD1( IM, (GLfloat) *u ); 2767 } 2768 2769 2770 void 2771 _mesa_EvalCoord2d( GLdouble u, GLdouble v ) 2772 { 2773 GET_IMMEDIATE; 2774 EVALCOORD2( IM, (GLfloat) u, (GLfloat) v ); 2775 } 2776 2777 2778 void 2779 _mesa_EvalCoord2f( GLfloat u, GLfloat v ) 2780 { 2781 GET_IMMEDIATE; 2782 EVALCOORD2( IM, u, v ); 2783 } 2784 2785 2786 /* Lame internal function: 2787 */ 2788 static void 2789 eval_coord2f( GLcontext *CC, GLfloat u, GLfloat v ) 2790 { 2791 struct immediate *i = CC->input; 2792 EVALCOORD2( i, u, v ); 2793 } 2794 2795 2796 void 2797 _mesa_EvalCoord2dv( const GLdouble *u ) 2798 { 2799 GET_IMMEDIATE; 2800 EVALCOORD2( IM, (GLfloat) u[0], (GLfloat) u[1] ); 2801 } 2802 2803 2804 void 2805 _mesa_EvalCoord2fv( const GLfloat *u ) 2806 { 2807 GET_IMMEDIATE; 2808 EVALCOORD2( IM, u[0], u[1] ); 2809 } 2810 2811 2812 void 2813 _mesa_EvalPoint1( GLint i ) 2814 { 2815 GET_IMMEDIATE; 2816 EVALPOINT1( IM, i ); 2817 } 2818 2819 2820 void 2821 _mesa_EvalPoint2( GLint i, GLint j ) 2822 { 2823 GET_IMMEDIATE; 2824 EVALPOINT2( IM, i, j ); 2825 } 2826 2827 2828 2829 2830 2831 void 2832 _mesa_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) 2833 { 2834 GET_CURRENT_CONTEXT(ctx); 2658 2835 GLint i; 2659 2836 GLfloat u, du; … … 2688 2865 gl_Begin( ctx, prim ); 2689 2866 for (i=i1;i<=i2;i++,u+=du) { 2690 gl_EvalCoord1f( ctx, u );2867 eval_coord1f( ctx, u ); 2691 2868 } 2692 2869 gl_End(ctx); … … 2695 2872 2696 2873 2697 void gl_EvalMesh2( GLcontext* ctx, 2698 GLenum mode, 2699 GLint i1, GLint i2, 2700 GLint j1, GLint j2 ) 2701 { 2874 void 2875 _mesa_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) 2876 { 2877 GET_CURRENT_CONTEXT(ctx); 2702 2878 GLint i, j; 2703 2879 GLfloat u, du, v, dv, v1, u1; … … 2721 2897 gl_Begin( ctx, GL_POINTS ); 2722 2898 for (v=v1,j=j1;j<=j2;j++,v+=dv) { 2723 2724 gl_EvalCoord2f( ctx, u, v );2725 2899 for (u=u1,i=i1;i<=i2;i++,u+=du) { 2900 eval_coord2f( ctx, u, v ); 2901 } 2726 2902 } 2727 2903 gl_End(ctx); … … 2729 2905 case GL_LINE: 2730 2906 for (v=v1,j=j1;j<=j2;j++,v+=dv) { 2731 2732 2733 gl_EvalCoord2f( ctx, u, v );2734 2735 2907 gl_Begin( ctx, GL_LINE_STRIP ); 2908 for (u=u1,i=i1;i<=i2;i++,u+=du) { 2909 eval_coord2f( ctx, u, v ); 2910 } 2911 gl_End(ctx); 2736 2912 } 2737 2913 for (u=u1,i=i1;i<=i2;i++,u+=du) { 2738 2739 2740 gl_EvalCoord2f( ctx, u, v );2741 2742 2914 gl_Begin( ctx, GL_LINE_STRIP ); 2915 for (v=v1,j=j1;j<=j2;j++,v+=dv) { 2916 eval_coord2f( ctx, u, v ); 2917 } 2918 gl_End(ctx); 2743 2919 } 2744 2920 break; 2745 2921 case GL_FILL: 2746 2922 for (v=v1,j=j1;j<j2;j++,v+=dv) { 2747 2748 2749 2750 2751 gl_EvalCoord2f( ctx, u, v );2752 gl_EvalCoord2f( ctx, u, v+dv );2753 2754 2923 /* NOTE: a quad strip can't be used because the four */ 2924 /* can't be guaranteed to be coplanar! */ 2925 gl_Begin( ctx, GL_TRIANGLE_STRIP ); 2926 for (u=u1,i=i1;i<=i2;i++,u+=du) { 2927 eval_coord2f( ctx, u, v ); 2928 eval_coord2f( ctx, u, v+dv ); 2929 } 2930 gl_End(ctx); 2755 2931 } 2756 2932 break;
Note:
See TracChangeset
for help on using the changeset viewer.