Compare commits
	
		
			292 Commits
		
	
	
		
			mesa-24.1.
			...
			mesa_3_2_1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | e1aaeb5a45 | ||
|  | 1ec0bef98e | ||
|  | 4105daf0b1 | ||
|  | 92986be121 | ||
|  | 086f5701a4 | ||
|  | f9a0ea5415 | ||
|  | 91e07e6b27 | ||
|  | abfd41b673 | ||
|  | 37d37e8c38 | ||
|  | 46a064e6d3 | ||
|  | b0c18181e5 | ||
|  | 19f87266b1 | ||
|  | 463b3c5665 | ||
|  | b3215842b2 | ||
|  | 4403f5cd30 | ||
|  | 83456f39d6 | ||
|  | 12c1fef737 | ||
|  | c01feb8653 | ||
|  | 1b8d0fdcde | ||
|  | 761c5b23bb | ||
|  | 7b0ee9f64b | ||
|  | 865b03207c | ||
|  | 39be967b6d | ||
|  | d51009ad5d | ||
|  | 422b2c887c | ||
|  | 9d5b7e2b71 | ||
|  | 7f43532d4c | ||
|  | e99fda30fb | ||
|  | 6ac752afc5 | ||
|  | 314bd32cf3 | ||
|  | 87492f9c67 | ||
|  | 3e78a0e555 | ||
|  | 674509fe95 | ||
|  | 4020d5b7fc | ||
|  | b276a01a3c | ||
|  | a1a1b9bf8b | ||
|  | 675835139a | ||
|  | 14652699f3 | ||
|  | 170d246324 | ||
|  | 55b536ab30 | ||
|  | 73d7a8a9a3 | ||
|  | 6e85dacc57 | ||
|  | b8fc81d266 | ||
|  | 821312402c | ||
|  | 9c1629bd17 | ||
|  | 83670c38ca | ||
|  | 3222cd1397 | ||
|  | 0c7d87ac2e | ||
|  | 86eb38b4a0 | ||
|  | 5aa48b622d | ||
|  | 2e156a37aa | ||
|  | 777ee76f86 | ||
|  | 179d2702d3 | ||
|  | c274b95769 | ||
|  | 53a3d5fc8b | ||
|  | 66f13cefec | ||
|  | 9a20b54fb2 | ||
|  | 5537322607 | ||
|  | 8b41f43e5c | ||
|  | 83d028f92a | ||
|  | 9a51d84f55 | ||
|  | 96719f0999 | ||
|  | 477299afb1 | ||
|  | a23141fd75 | ||
|  | 1b4731700a | ||
|  | 2ec3d124ec | ||
|  | c91b2ad8fc | ||
|  | 0da42c0c21 | ||
|  | f5f3e5d752 | ||
|  | b0148e2f5d | ||
|  | b3811b9f4d | ||
|  | 5b7fc632ad | ||
|  | 5febd0ce8b | ||
|  | 3d2264b2ce | ||
|  | 486565f88a | ||
|  | 0931339ea8 | ||
|  | 7fbad8f406 | ||
|  | 3382e6e359 | ||
|  | 96cefd6d02 | ||
|  | 8033ed691e | ||
|  | 59aa79ea5e | ||
|  | 5478ccec45 | ||
|  | ba31a93ae5 | ||
|  | 3c5265bf69 | ||
|  | 9c7494fc0c | ||
|  | 9e077508f9 | ||
|  | 95b0d3528a | ||
|  | dcd4ea4746 | ||
|  | e01205dd9e | ||
|  | 198ed1fe93 | ||
|  | 5c2f9bc2de | ||
|  | e4fb0285f2 | ||
|  | 573ab9c964 | ||
|  | 37f4e1fe40 | ||
|  | 4f4a6b4a4f | ||
|  | 884aa6efd8 | ||
|  | ceb817650f | ||
|  | 19ac63ce20 | ||
|  | 1b4c728f77 | ||
|  | 140809c588 | ||
|  | e6df48f9a6 | ||
|  | 31bcf75ce1 | ||
|  | 9818daae60 | ||
|  | 5ade8ed0b4 | ||
|  | 1b539ed613 | ||
|  | 905ad56487 | ||
|  | a16ebe76c9 | ||
|  | 96563ae75f | ||
|  | 11769b9737 | ||
|  | 474363af47 | ||
|  | 99189ad4fb | ||
|  | 361fc66e36 | ||
|  | 0b616332f7 | ||
|  | 4f030d12ad | ||
|  | 792837dafd | ||
|  | 8c77d45b06 | ||
|  | 660f6dec37 | ||
|  | 14e7ab2c4f | ||
|  | 089f713f0d | ||
|  | 53f81339a4 | ||
|  | 2cf228e93d | ||
|  | 4e8ee6840a | ||
|  | 5144d47c54 | ||
|  | 3eaed2527a | ||
|  | 353bd24876 | ||
|  | 473d64f9cc | ||
|  | c21598fb0d | ||
|  | 287abc7aa0 | ||
|  | e6e732c64d | ||
|  | 61cca3827f | ||
|  | 88406455f5 | ||
|  | fb67681366 | ||
|  | ead75d4894 | ||
|  | bd4ba2b85d | ||
|  | 998839109e | ||
|  | a23d3cc054 | ||
|  | 803d5a12ab | ||
|  | 462144c0f0 | ||
|  | a780e6f228 | ||
|  | 7feab37f8a | ||
|  | 091834064c | ||
|  | 9275c62963 | ||
|  | 7166ff0412 | ||
|  | bf69170dff | ||
|  | 3c6dd8791c | ||
|  | 69bc4e01b8 | ||
|  | b2d3b2dbe0 | ||
|  | c508641aec | ||
|  | f008070ad5 | ||
|  | c562884268 | ||
|  | 992795f4c9 | ||
|  | d21f13cb05 | ||
|  | f1b26953e8 | ||
|  | 216244bed8 | ||
|  | b85c3afc01 | ||
|  | e4ee3cc9d1 | ||
|  | 03d7215604 | ||
|  | 82e6fe5e36 | ||
|  | dde5788a44 | ||
|  | 8038f3747d | ||
|  | 0df95816c5 | ||
|  | 3692626805 | ||
|  | b31d01d4a7 | ||
|  | ba8ef5917e | ||
|  | f5d0252282 | ||
|  | 83386c0f7b | ||
|  | 5e8aa8e5d9 | ||
|  | f008ed46d1 | ||
|  | 7b5a65ce28 | ||
|  | 4f4b93d8ae | ||
|  | 81f97580cc | ||
|  | 8de719530c | ||
|  | f0040ae8f5 | ||
|  | ec2425c3b6 | ||
|  | aedc01c850 | ||
|  | 93c528a6d5 | ||
|  | 443d666b9a | ||
|  | d794378dbc | ||
|  | 76dad53903 | ||
|  | e5f8d98410 | ||
|  | 7f8fed5711 | ||
|  | 5ed6197b0a | ||
|  | 609524894a | ||
|  | 553adbb0c2 | ||
|  | 361afca6a4 | ||
|  | 4c6a2f6a33 | ||
|  | 717ec19e30 | ||
|  | 411fb983f7 | ||
|  | 5dbe3d9c98 | ||
|  | fea067dce8 | ||
|  | 1cfc846bf3 | ||
|  | dfa45b9f26 | ||
|  | 6f602ed44d | ||
|  | 34bf1dd293 | ||
|  | 9a7584b062 | ||
|  | d6dfb94059 | ||
|  | b9ee2850cf | ||
|  | 4183bf524d | ||
|  | 1721f447c6 | ||
|  | 46ef216f7f | ||
|  | a171741d65 | ||
|  | 320c2cdb0f | ||
|  | 9ed70db8ea | ||
|  | acbb8cb9dd | ||
|  | 7889a93ff7 | ||
|  | 970a551795 | ||
|  | d7eae31275 | ||
|  | b0294cbbfe | ||
|  | e2ff9be0b6 | ||
|  | 16283fea40 | ||
|  | 82ba9449e1 | ||
|  | 2377ea9c66 | ||
|  | ac3593ada5 | ||
|  | d6dd996e56 | ||
|  | cee556daea | ||
|  | 313f225a2e | ||
|  | 95d565b64c | ||
|  | 32ea1fdc7e | ||
|  | 8d52ee9ae1 | ||
|  | 9a07202f5e | ||
|  | 0f953d69e5 | ||
|  | b3a1034c05 | ||
|  | 8956d5131d | ||
|  | 428cf99956 | ||
|  | 1e5dab20fd | ||
|  | aa5251d170 | ||
|  | 607add71d9 | ||
|  | 074710629d | ||
|  | 7f0b5dd69c | ||
|  | 09b83c889b | ||
|  | 9c416c235b | ||
|  | 6ce3f22ae9 | ||
|  | 32093ccc86 | ||
|  | d5ff1d782b | ||
|  | 2ed8894aca | ||
|  | 33cd8a5490 | ||
|  | dd25e9852a | ||
|  | 05df9bb6e0 | ||
|  | a335bf404f | ||
|  | 783a67260a | ||
|  | e99e126479 | ||
|  | 98fce32683 | ||
|  | 9493e540f9 | ||
|  | 7138d38cc1 | ||
|  | 9e7f0e1f7c | ||
|  | 52345bfa1e | ||
|  | 93070bceca | ||
|  | 5b90676fc7 | ||
|  | 92ad030cb7 | ||
|  | 9afe0e4278 | ||
|  | 3e63be01d1 | ||
|  | c73eedbe96 | ||
|  | 8c54c4d9f7 | ||
|  | 33817940c4 | ||
|  | 7ec2e161ac | ||
|  | fc2e8cd0d0 | ||
|  | a3ea9edfda | ||
|  | 7fa9891de2 | ||
|  | ddd9410a67 | ||
|  | 532dde3e99 | ||
|  | 2a6f393fa7 | ||
|  | 2d1b9e0402 | ||
|  | 19c878467f | ||
|  | 1041d573ff | ||
|  | fda834160b | ||
|  | 7d35435bb6 | ||
|  | 5c191a62bc | ||
|  | eca3b6e47e | ||
|  | aa0a8624fb | ||
|  | f16a627115 | ||
|  | 1d39975c4e | ||
|  | 62d5f4c73e | ||
|  | d42cd99c66 | ||
|  | 03ef882735 | ||
|  | 19d0fcafb3 | ||
|  | cc6e92ff49 | ||
|  | 463c2b6b77 | ||
|  | 09c133e16f | ||
|  | bb1d3c1ad1 | ||
|  | cabb6a91cd | ||
|  | c76ac6b644 | ||
|  | 6842075a09 | ||
|  | b1da189fe5 | ||
|  | 9b635315be | ||
|  | 702baf4cd3 | ||
|  | b27ee886e4 | ||
|  | 276465cec6 | ||
|  | 5428538d65 | ||
|  | ab5d4d6233 | ||
|  | 2450ce124b | ||
|  | cf22eb77a7 | ||
|  | 569802cdb1 | 
							
								
								
									
										168
									
								
								Make-config
									
									
									
									
									
								
							
							
						
						
									
										168
									
								
								Make-config
									
									
									
									
									
								
							| @@ -1,13 +1,13 @@ | ||||
| # $Id: Make-config,v 1.11 1999/11/11 01:28:16 brianp Exp $ | ||||
| # $Id: Make-config,v 1.10.2.7 2000/07/11 14:41:44 brianp Exp $ | ||||
|  | ||||
| MESA_MAJOR=3 | ||||
| MESA_MINOR=3 | ||||
| MESA_TINY=0 | ||||
| MESA_MINOR=2 | ||||
| MESA_TINY=1 | ||||
| VERSION=$(MESA_MAJOR).$(MESA_MINOR) | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| #  | ||||
| # Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
| # Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
| #  | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a | ||||
| # copy of this software and associated documentation files (the "Software"), | ||||
| @@ -46,7 +46,7 @@ VERSION=$(MESA_MAJOR).$(MESA_MINOR) | ||||
| # To enable profiling add -DPROFILE to the CFLAGS line.  Be sure to set the | ||||
| # MESA_PROFILE environment variable to enable printing of the profile report. | ||||
| # | ||||
| # If your system supports the X Shared Memory extension add -DUSE_XSHM to the | ||||
| # If your system supports the X Shared Memory extension add -DSHM to the | ||||
| # CFLAGS line and add -lXext to the XLIBS line. | ||||
| # | ||||
| # Some compilers complain about const parameters.  Adding -DNO_CONST to the | ||||
| @@ -183,7 +183,7 @@ freebsd: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -fPIC -pedantic -I/usr/X11R6/include -DUSE_XSHM -DHZ=100" \ | ||||
| 	"CFLAGS = -O2 -fPIC -pedantic -I/usr/X11R6/include -DSHM -DHZ=100" \ | ||||
| 	"MAKELIB = ../bin/mklib.freebsd" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -194,7 +194,7 @@ freebsd-386: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -ffast-math -fPIC -pedantic -I/usr/X11R6/include -DUSE_XSHM -DHZ=100 -DUSE_X86_ASM -DFREEBSD" \ | ||||
| 	"CFLAGS = -O3 -ffast-math -fPIC -pedantic -I/usr/X11R6/include -DSHM -DHZ=100 -DUSE_X86_ASM -DFREEBSD" \ | ||||
| 	"MAKELIB = ../bin/mklib.freebsd" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S" | ||||
| @@ -217,7 +217,7 @@ hpux9: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = +O3 -Aa -D_HPUX_SOURCE -I/usr/include/X11R5 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = +O3 -Aa -D_HPUX_SOURCE -I/usr/include/X11R5 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R5 -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -228,7 +228,7 @@ hpux9-gcc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R5 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R5 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R5 -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -239,7 +239,7 @@ hpux9-sl: | ||||
| 	"GLUT_LIB = libglut.sl" \ | ||||
| 	"GLW_LIB = libGLw.sl" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = +z +O3 +Olibcalls +ESlit -Aa +Onolimit -D_HPUX_SOURCE -I/usr/include/X11R5 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = +z +O3 +Olibcalls +ESlit -Aa +Onolimit -D_HPUX_SOURCE -I/usr/include/X11R5 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.hpux" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R5 -s -Wl,+s,-B,nonfatal,-B,immediate -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -250,7 +250,7 @@ hpux9-gcc-sl: | ||||
| 	"GLUT_LIB = libglut.sl" \ | ||||
| 	"GLW_LIB = libGLw.sl" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -fPIC -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R5 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -fPIC -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R5 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.hpux" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R5 -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -261,7 +261,7 @@ hpux10: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = +O3 +DAportable -Aa -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = +O3 +DAportable -Aa -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -272,7 +272,7 @@ hpux10-sl: | ||||
| 	"GLUT_LIB = libglut" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = +z -Ae +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = +z -Ae +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.hpux" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -283,7 +283,7 @@ hpux10-gcc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include  -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include  -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -294,7 +294,7 @@ hpux10-gcc-sl: | ||||
| 	"GLUT_LIB = libglut.sl" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -fPIC -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -fPIC -ansi -O3 -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.hpux" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -307,7 +307,7 @@ irix4: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O2 -ansi -prototypes -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O2 -ansi -prototypes -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -319,7 +319,7 @@ irix5: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O2 -ansi -fullwarn -DUSE_XSHM -DNO_CONST" \ | ||||
| 	"CFLAGS = -O2 -ansi -fullwarn -DSHM -DNO_CONST" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -331,7 +331,7 @@ irix5-gcc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -pedantic -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O2 -pedantic -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -343,7 +343,7 @@ irix5-dso: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O2 -ansi -fullwarn -DUSE_XSHM -DNO_CONST" \ | ||||
| 	"CFLAGS = -O2 -ansi -fullwarn -DSHM -DNO_CONST" \ | ||||
| 	"MAKELIB = ../bin/mklib.irix5" \ | ||||
| 	"XLIBS = -rpath ../lib -lX11 -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -354,7 +354,7 @@ irix6-o32: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -32 -mips2 -O2 -ansi -DUSE_XSHM -DNO_CONST" \ | ||||
| 	"CFLAGS = -32 -mips2 -O2 -ansi -DSHM -DNO_CONST" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -365,7 +365,7 @@ irix6-o32-dso: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -32 -mips2 -O2 -ansi -DUSE_XSHM -DNO_CONST" \ | ||||
| 	"CFLAGS = -32 -mips2 -O2 -ansi -DSHM -DNO_CONST" \ | ||||
| 	"MAKELIB = ../bin/mklib.irix6-32" \ | ||||
| 	"XLIBS = -rpath ../lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -391,7 +391,7 @@ irix6-n32-dso: | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"LIBDIR = ../lib32" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -n32 -mips3 -O3 -ansi -DUSE_XSHM -woff 1185,1521" \ | ||||
| 	"CFLAGS = -n32 -mips3 -O3 -ansi -DSHM -woff 1185,1521" \ | ||||
| 	"MAKELIB = ../bin/mklib.irix6-n32" \ | ||||
| 	"XLIBS = -rpath ../lib32 -lX11 -lXmu -lXi -lfpe -lm" | ||||
|  | ||||
| @@ -403,7 +403,7 @@ irix6-gcc-n32-sl: | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"LIBDIR = ../lib32" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -mabi=n32 -mips3 -O3 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -mabi=n32 -mips3 -O3 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.irix6-n32" \ | ||||
| 	"XLIBS = -rpath ../lib32 -lX11 -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -423,7 +423,7 @@ irix6-64: | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"LIBDIR = ../lib64" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -64 -O3 -ansi -woff 1068,1069,1174,1185,1209,1474,1552 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -64 -O3 -ansi -woff 1068,1069,1174,1185,1209,1474,1552 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -435,12 +435,12 @@ irix6-64-dso: | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"LIBDIR = ../lib64" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -64 -O3 -ansi -woff 1068,1069,1174,1185,1209,1474,1552 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -64 -O3 -ansi -woff 1068,1069,1174,1185,1209,1474,1552 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.irix6-64" \ | ||||
| 	"XLIBS = -rpath ../lib64 -lX11 -lXmu -lXi -lm" | ||||
|  | ||||
| # May want to try these CFLAGS for better performance under Linux and GCC: | ||||
| # -fPIC -O2 -ansi -pedantic -mieee-fp -DUSE_XSHM -funroll-loops | ||||
| # -fPIC -O2 -ansi -pedantic -mieee-fp -DSHM -funroll-loops | ||||
| # -fexpensive-optimizations -fomit-frame-pointer -ffast-math | ||||
| # and  -malign-loops=2 -malign-jumps=2 -malign-functions=2 for Pentium | ||||
|  | ||||
| @@ -451,7 +451,7 @@ linux: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -I/usr/X11R6/include" \ | ||||
| 	"CFLAGS = -O3 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -I/usr/X11R6/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" | ||||
|  | ||||
| @@ -465,7 +465,7 @@ linux-elf: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -I/usr/X11R6/include" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -I/usr/X11R6/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" | ||||
|  | ||||
| @@ -476,7 +476,7 @@ linux-glide: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DFX -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -L/usr/local/glide/lib -lglide2x -lm" | ||||
|  | ||||
| @@ -488,7 +488,7 @@ linux-386: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -I/usr/X11R6/include" \ | ||||
| 	"CFLAGS = -O3 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DUSE_X86_ASM -I/usr/X11R6/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -500,7 +500,7 @@ linux-386-elf: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -I/usr/X11R6/include" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DUSE_X86_ASM -I/usr/X11R6/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -512,7 +512,7 @@ linux-386-glide: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_XSHM -DFX -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DSHM -DFX -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -L/usr/local/glide/lib -lglide2x -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -524,7 +524,7 @@ linux-386-glide-mits: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -D_REENTRANT -DMITS -DUSE_X86_ASM -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DFX -D_REENTRANT -DMITS -DUSE_X86_ASM -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -L/usr/local/glide/lib -lglide2x -lm -lpthread" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -536,7 +536,7 @@ linux-386-opt-V2-glide: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DFX_V2 -DUSE_X86_ASM -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include"\ | ||||
| 	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DFX -DFX_V2 -DUSE_X86_ASM -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include"\ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -L/usr/local/glide/lib -lglide2x -lm -lpthread" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -548,7 +548,7 @@ linux-386-opt-glide: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DFX -DUSE_X86_ASM -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -O3 -m486 -fomit-frame-pointer -pipe -ansi -pedantic -ffast-math -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DFX -DUSE_X86_ASM -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -L/usr/local/glide/lib -lglide2x -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -560,7 +560,7 @@ linux-3dnow: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \ | ||||
| 	"CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -I/usr/X11R6/include" \ | ||||
| 	"CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -I/usr/X11R6/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S \ | ||||
| @@ -578,7 +578,7 @@ linux-3dnow-glide: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_XSHM -DFX -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include -I/usr/src/mesa-glx/src/FX/X86" \ | ||||
| 	"CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DSHM -DFX -I/usr/X11R6/include -I/usr/include/glide -I/usr/local/glide/include -I/usr/src/mesa-glx/src/FX/X86" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -L/usr/local/glide/lib -lglide2x -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S \ | ||||
| @@ -598,7 +598,7 @@ linux-386-pthread-shared-glide: | ||||
| 	"GLU_LIB = libGLU.so" \ | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -fPIC -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DUSE_X86_ASM -D_REENTRANT -DTHREADS -DPTHREADS -DFX -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -O3 -fPIC -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM -DUSE_X86_ASM -D_REENTRANT -DTHREADS -DPTHREADS -DFX -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../mklib.glide" \ | ||||
| 	"XLIBS = -L/usr/X11/lib -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lpthread -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S \ | ||||
| @@ -612,7 +612,7 @@ linux-ggi: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc"  \ | ||||
| 	"CFLAGS = -O3 -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DGGI -DCDECL=" \ | ||||
| 	"CFLAGS = -O3 -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM -DGGI -DCDECL=" \ | ||||
| 	"MAKELIB = ../bin/mklib.ggi" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lggi -lm" | ||||
|  | ||||
| @@ -624,7 +624,7 @@ linux-386-ggi: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc"  \ | ||||
| 	"CFLAGS = -O3 -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DUSE_X86_ASM -DGGI -DCDECL=" \ | ||||
| 	"CFLAGS = -O3 -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM -DUSE_X86_ASM -DGGI -DCDECL=" \ | ||||
| 	"MAKELIB = ../bin/mklib.ggi" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lggi -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -634,10 +634,10 @@ linux-alpha: | ||||
| 	$(MAKE) $(MFLAGS) -f Makefile.X11 targets \ | ||||
| 	"GL_LIB = libGL.a" \ | ||||
| 	"GLU_LIB = libGLU.a" \ | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -mieee -pedantic -L/usr/X11R6/lib -D_XOPEN_SOURCE -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O3 -mcpu=ev5 -ansi -mieee -pedantic -L/usr/X11R6/lib -D_XOPEN_SOURCE -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lm" | ||||
|  | ||||
| @@ -648,7 +648,7 @@ linux-alpha-elf: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -ansi -mieee -pedantic -fPIC -D_XOPEN_SOURCE -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O3 -mcpu=ev5 -ansi -mieee -pedantic -fPIC -D_XOPEN_SOURCE -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -664,7 +664,7 @@ linux-ppc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -mcpu=603 -ansi -pedantic -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O3 -mcpu=603 -ansi -pedantic -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" | ||||
|  | ||||
| @@ -676,7 +676,7 @@ linux-ppc-so: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -mcpu=603 -ansi -pedantic -fPIC -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O3 -mcpu=603 -ansi -pedantic -fPIC -fsigned-char -ffast-math -funroll-loops -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" | ||||
|  | ||||
| @@ -687,7 +687,7 @@ linux-386-pthread: | ||||
| 	"GLU_LIB = libGLU.a" \ | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R\6/include -DUSE_XSHM -DUSE_X86_ASM -D_REENTRANT -DTHREADS -DPTHREADS" \ | ||||
| 	"CFLAGS = -O3 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R\6/include -DSHM -DUSE_X86_ASM -D_REENTRANT -DTHREADS -DPTHREADS" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lpthread -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -699,7 +699,7 @@ linux-386-pthread-shared: | ||||
| 	"GLU_LIB = libGLU.so" \ | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -fPIC -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/us\r/X11R6/include -DUSE_XSHM -DUSE_X86_ASM -D_REENTRANT -DTHREADS -DPTHREADS" \ | ||||
| 	"CFLAGS = -O3 -fPIC -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/us\r/X11R6/include -DSHM -DUSE_X86_ASM -D_REENTRANT -DTHREADS -DPTHREADS" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lpthread -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -711,7 +711,7 @@ linux-sparc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -pedantic -funroll-loops -O3 -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -pedantic -funroll-loops -O3 -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXt -lSM -lICE -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -723,7 +723,7 @@ linux-sparc5-elf: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -mv8 -O2 -ffast-math -ansi -pedantic -fPIC -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -mv8 -O3 -ffast-math -ansi -pedantic -fPIC -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" | ||||
|  | ||||
| @@ -735,12 +735,12 @@ linux-sparc-ultra: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -mv8 -O2 -mtune=ultrasparc -ansi -pedantic -fPIC -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -mv8 -O3 -mtune=ultrasparc -ansi -pedantic -fPIC -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" | ||||
|  | ||||
| # May want to add these CFLAGS for better performance under LynxOS and GCC: | ||||
| # -fPIC -O2 -ansi -pedantic -mieee-fp -DUSE_XSHM -funroll-loops | ||||
| # -fPIC -O2 -ansi -pedantic -mieee-fp -DSHM -funroll-loops | ||||
| # -fexpensive-optimizations -fomit-frame-pointer -ffast-math | ||||
| # and  -malign-loops=2 -malign-jumps=2 -malign-functions=2 for Pentium | ||||
|  | ||||
| @@ -751,7 +751,7 @@ lynxos: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -ansi -pedantic -funroll-loops -ffast-math -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O2 -ansi -pedantic -funroll-loops -ffast-math -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/X11/lib -lXext -lXi -lXmu -lX11 -lbsd -lm" | ||||
|  | ||||
| @@ -795,7 +795,7 @@ netbsd: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -fPIC -DUSE_XSHM -I/usr/X11R6/include -DHZ=100"  \ | ||||
| 	"CFLAGS = -O3 -fPIC -DSHM -I/usr/X11R6/include -DHZ=100"  \ | ||||
| 	"MAKELIB = ../bin/mklib.netbsd" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lXext -lXmu -lXi -lX11 -lm" | ||||
|  | ||||
| @@ -815,7 +815,7 @@ openbsd: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O2 -fPIC -I/usr/X11R6/include -DUSE_XSHM -DHZ=100" \ | ||||
| 	"CFLAGS = -O2 -fPIC -I/usr/X11R6/include -DSHM -DHZ=100" \ | ||||
| 	"MAKELIB = ../bin/mklib.openbsd" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -856,7 +856,7 @@ osf1: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O2 -std1 -ieee_with_no_inexact -DUSE_XSHM -DNO_CONST" \ | ||||
| 	"CFLAGS = -O0 -std1 -ieee_with_no_inexact -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -867,7 +867,7 @@ osf1-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O2 -std1 -ieee_with_no_inexact -DUSE_XSHM -DNO_CONST" \ | ||||
| 	"CFLAGS = -O0 -std1 -ieee_with_no_inexact -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.osf1" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -934,7 +934,7 @@ solaris-x86: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -Xa -xO3 -xpentium -KPIC -I/usr/openwin/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -Xa -xO3 -xpentium -KPIC -I/usr/openwin/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.solaris" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -945,7 +945,7 @@ solaris-x86-gcc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -m486 -fPIC -I/usr/openwin/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O3 -m486 -fPIC -I/usr/openwin/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.solaris" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -956,7 +956,7 @@ sunos4: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = acc" \ | ||||
| 	"CFLAGS = -O -DUSE_XSHM -DSUNOS4" \ | ||||
| 	"CFLAGS = -O -DSHM -DSUNOS4" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -967,7 +967,7 @@ sunos4-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = acc" \ | ||||
| 	"CFLAGS = -Kpic -O -I/usr/include/X11R5 -DUSE_XSHM -DSUNOS4" \ | ||||
| 	"CFLAGS = -Kpic -O -I/usr/include/X11R5 -DSHM -DSUNOS4" \ | ||||
| 	"MAKELIB = ld -assert pure-text -o" \ | ||||
| 	"XLIBS = -L/usr/lib/X11R5 -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -978,7 +978,7 @@ sunos4-gcc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -DUSE_XSHM -DSUNOS4 -I/usr/openwin/include" \ | ||||
| 	"CFLAGS = -O3 -DSHM -DSUNOS4 -I/usr/openwin/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -989,7 +989,7 @@ sunos4-gcc-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -fPIC -O3 -I/usr/openwin/include -I/usr/include/X11R5 -I/usr/include/X11R5 -DUSE_XSHM -DSUNOS4 -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -fPIC -O3 -I/usr/openwin/include -I/usr/include/X11R5 -I/usr/include/X11R5 -DSHM -DSUNOS4 -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.sunos4" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1000,7 +1000,7 @@ sunos4-gcc-x11r6-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -fPIC -O3 -I/usr/X11R6.3/include -DUSE_XSHM -DSUNOS4 -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -fPIC -O3 -I/usr/X11R6.3/include -DSHM -DSUNOS4 -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.sunos4" \ | ||||
| 	"XLIBS = -L/usr/X11R6.3/lib/X11 -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1011,7 +1011,7 @@ sunos5: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -Xa -fast -xO4 -native -I/usr/openwin/include -I/usr/dt/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -Xa -fast -xO4 -native -I/usr/openwin/include -I/usr/dt/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -L/usr/dt/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1022,7 +1022,7 @@ sunos5-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -KPIC -Xa -O -I/usr/openwin/include -I/usr/dt/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -KPIC -Xa -O -I/usr/openwin/include -I/usr/dt/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.sunos5" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -L/usr/dt/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1033,7 +1033,7 @@ sunos5-ultra: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -Xa -fast -xO5 -xtarget=ultra -I/usr/openwin/include -I/usr/dt/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -Xa -fast -xO5 -xtarget=ultra -I/usr/openwin/include -I/usr/dt/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -L/usr/dt/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1044,7 +1044,7 @@ sunos5-ultra-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -KPIC -Xa -fast -xO5 -xtarget=ultra -I/usr/openwin/include -I/usr/dt/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -KPIC -Xa -fast -xO5 -xtarget=ultra -I/usr/openwin/include -I/usr/dt/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.sunos5" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -L/usr/dt/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1055,7 +1055,7 @@ sunos5-gcc: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -I/usr/openwin/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -O3 -I/usr/openwin/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1066,7 +1066,7 @@ sunos5-gcc-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -fPIC -O3 -I/usr/openwin/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -fPIC -O3 -I/usr/openwin/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.sunos5" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1077,7 +1077,7 @@ sunos5-x11r6-gcc-sl: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -fPIC -O3 -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -fPIC -O3 -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.sunos5" \ | ||||
| 	"XLIBS = -lSM -lICE -lX11 -lXext -lXmu -lXi -lnsl -lsocket -lm" | ||||
|  | ||||
| @@ -1088,7 +1088,7 @@ sunos5-pthread: | ||||
| 	"GLU_LIB = libGLU.a" \ | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -mt -Xa -fast -xO4 -native -I/usr/openwin/include -I/usr/dt/include -DUSE_XSHM -DSOLARIS_2_4\_BUG -DTHREADS -DPTHREADS" \ | ||||
| 	"CFLAGS = -mt -Xa -fast -xO4 -native -I/usr/openwin/include -I/usr/dt/include -DSHM -DSOLARIS_2_4_BUG -DTHREADS -DPTHREADS" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -L/usr/dt/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lpthread -lm" | ||||
|  | ||||
| @@ -1099,7 +1099,7 @@ sunos5-thread: | ||||
| 	"GLU_LIB = libGLU.a" \ | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -mt -Xa -fast -xO4 -native -I/usr/openwin/include -I/usr/dt/include -DUSE_XSHM -DSOLARIS_2_4\_BUG -DTHREADS -DSOLARIS_THREADS" \ | ||||
| 	"CFLAGS = -mt -Xa -fast -xO4 -native -I/usr/openwin/include -I/usr/dt/include -DSHM -DSOLARIS_2_4_BUG -DTHREADS -DSOLARIS_THREADS" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -L/usr/dt/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lthread -lm" | ||||
|  | ||||
| @@ -1110,7 +1110,7 @@ sunos5-gcc-thread: | ||||
| 	"GLU_LIB = libGLU.a" \ | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -I/usr/openwin/include -DUSE_XSHM -DSOLARIS_2_4_BUG -D_REENTRANT -DTHREADS -DSOLARIS_THREADS" \ | ||||
| 	"CFLAGS = -O3 -I/usr/openwin/include -DSHM -DSOLARIS_2_4_BUG -D_REENTRANT -DTHREADS -DSOLARIS_THR\EADS" \ | ||||
|       	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lthread -lm" | ||||
|  | ||||
| @@ -1121,7 +1121,7 @@ sunos5-gcc-pthread: | ||||
| 	"GLU_LIB = libGLU.a" \ | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O3 -I/usr/openwin/include -DUSE_XSHM -DSOLARIS_2_4_BUG -D_REENTRANT -DTHREADS -DPTHREADS" \ | ||||
| 	"CFLAGS = -O3 -I/usr/openwin/include -DSHM -DSOLARIS_2_4_BUG -D_REENTRANT -DTHREADS -DPTHREADS" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lpthread -lm" | ||||
|  | ||||
| @@ -1133,7 +1133,7 @@ sunSolaris-CC: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = CC" \ | ||||
| 	"CFLAGS = -O -I/usr/openwin/include -DUSE_XSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"CFLAGS = -O -I/usr/openwin/include -DSHM -DSOLARIS_2_4_BUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/openwin/lib -R/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1179,7 +1179,7 @@ unixware: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O -I/usr/X/include -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O -I/usr/X/include -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lsocket -lnsl -lm" | ||||
|  | ||||
| @@ -1190,7 +1190,7 @@ unixware-shared: | ||||
| 	"GLUT_LIB = libglut" \ | ||||
| 	"GLW_LIB = libGLw" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -O -I/usr/X/include -KPIC,inline -DUSE_XSHM" \ | ||||
| 	"CFLAGS = -O -I/usr/X/include -KPIC,inline -DSHM" \ | ||||
| 	"MAKELIB = ../bin/mklib.solaris" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lsocket -lnsl -lm" | ||||
|  | ||||
| @@ -1230,7 +1230,7 @@ irix-debug: | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"LIBDIR = ../lib32" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -g -n32 -ansi -fullwarn -DUSE_XSHM -DDEBUG -woff 1209,1210,1506,1521,3496" \ | ||||
| 	"CFLAGS = -g -n32 -ansi -fullwarn -DSHM -DDEBUG -woff 1209,1210,1506,1521,3496" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -rpath ../lib32 -lX11 -lXext -lXmu -lXi -lfpe -lXext -lXmu -lXi -lm" | ||||
|  | ||||
| @@ -1241,7 +1241,7 @@ DEBUG: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = cc" \ | ||||
| 	"CFLAGS = -g -ansi -prototypes -fullwarn -DUSE_XSHM -DDEBUG" \ | ||||
| 	"CFLAGS = -g -ansi -prototypes -fullwarn -DSHM -DDEBUG" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-rcv" \ | ||||
| 	"XLIBS = -lX11 -lXext -lXmu -lXi -lfpe -lm" | ||||
|  | ||||
| @@ -1253,7 +1253,7 @@ linux-debug: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -g -ansi -pedantic -Wall -DUSE_XSHM -DDEBUG -DSVGA -DFX -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM_not -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -g -ansi -pedantic -Wall -DSHM -DDEBUG -DSVGA -DFX -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM_not -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/local/glide/lib -lglide2x -ltexus -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lvga -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -1265,9 +1265,9 @@ linux-elf-debug: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -g -ansi -pedantic -Wall -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DDEBUG" \ | ||||
| 	"CFLAGS = -g -ansi -pedantic -Wall -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DDEBUG -DSVGA -DFX -I/usr/X11R6/include -I/usr/include/glide" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lvga -lm" \ | ||||
| 	"XLIBS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lvga -lm -lvga -L/usr/local/lib -L/usr/local/glide/lib -lglide2x" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
|  | ||||
| linux-glide-debug: | ||||
| @@ -1277,7 +1277,7 @@ linux-glide-debug: | ||||
| 	"GLUT_LIB = libglut.so" \ | ||||
| 	"GLW_LIB = libGLw.so" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -g -ansi -pedantic -Wall -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DUSE_XSHM -DFX -DDEBUG -I/usr/local/glide/include -I/usr/include/glide" \ | ||||
| 	"CFLAGS = -g -ansi -pedantic -Wall -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -I/usr/X11R6/include -DSHM -DFX -DDEBUG -I/usr/local/glide/include -I/usr/include/glide" \ | ||||
| 	"MAKELIB = ../bin/mklib.linux" \ | ||||
| 	"XLIBS = -L/usr/local/glide/lib -lglide2x -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lvga -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S X86/vertex.S" | ||||
| @@ -1290,7 +1290,7 @@ linux-prof: | ||||
| 	"GLUT_LIB = libglut.a" \ | ||||
| 	"GLW_LIB = libGLw.a" \ | ||||
| 	"CC = gcc" \ | ||||
| 	"CFLAGS = -O2 -pg -ansi -pedantic -Wall -DUSE_XSHM -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"CFLAGS = -O2 -pg -ansi -pedantic -Wall -DSHM -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -I/usr/include/glide -I/usr/local/glide/include" \ | ||||
| 	"MAKELIB = ../bin/mklib.ar-ruv" \ | ||||
| 	"XLIBS = -L/usr/local/glide/lib -lglide2x -L/usr/X11/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -lm" \ | ||||
| 	"ASM_SOURCES = X86/x86a.S X86/common_x86asm.S \ | ||||
|   | ||||
							
								
								
									
										351
									
								
								Makefile.X11
									
									
									
									
									
								
							
							
						
						
									
										351
									
								
								Makefile.X11
									
									
									
									
									
								
							| @@ -1,9 +1,9 @@ | ||||
| # $Id: Makefile.X11,v 1.12 1999/11/04 03:57:28 gareth Exp $ | ||||
| # $Id: Makefile.X11,v 1.12.2.14 2000/07/18 14:32:08 brianp Exp $ | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.1 | ||||
| # Version:  3.2.1 | ||||
| #  | ||||
| # Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
| # Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
| #  | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a | ||||
| # copy of this software and associated documentation files (the "Software"), | ||||
| @@ -161,6 +161,7 @@ sunos5-x11r6-gcc-sl ultrix-gcc unicos unixware uwin vistra: | ||||
| 	-mkdir lib | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	touch widgets-sgi/depend | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	cd src-glu ; $(MAKE) -f Makefile.X11 $@ | ||||
| @@ -169,12 +170,14 @@ sunos5-x11r6-gcc-sl ultrix-gcc unicos unixware uwin vistra: | ||||
| 	if [ -d xdemos ]   ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples ]  ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book ]     ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
|  | ||||
| irix6-n32 irix6-n32-dso irix6-gcc-n32-sl irix-debug: | ||||
| 	-mkdir lib32 | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	touch widgets-sgi/depend | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	cd src-glu ; $(MAKE) -f Makefile.X11 $@ | ||||
| @@ -183,12 +186,14 @@ irix6-n32 irix6-n32-dso irix6-gcc-n32-sl irix-debug: | ||||
| 	if [ -d xdemos ]   ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples ]  ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book ]     ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
|  | ||||
| irix6-64 irix6-64-dso: | ||||
| 	-mkdir lib64 | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	touch widgets-sgi/depend | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	cd src-glu ; $(MAKE) -f Makefile.X11 $@ | ||||
| @@ -197,6 +202,7 @@ irix6-64 irix6-64-dso: | ||||
| 	if [ -d xdemos ]   ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples ]  ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book ]     ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
|  | ||||
| amiwin: | ||||
| @@ -223,11 +229,13 @@ cygnus cygnus-linux: | ||||
| 	-mkdir lib | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	touch widgets-sgi/depend | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	cd src-glu ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	cd src-glut ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	cd demos ; $(MAKE) -f Makefile.X11 $@ | ||||
| 	if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d demos ]    ; then cd demos    ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d xdemos ]  ; then cd xdemos  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
| macintosh: | ||||
| 	@echo "See the README file for Macintosh intallation information" | ||||
| @@ -259,6 +267,7 @@ linux-ggi linux-386-ggi: | ||||
| 	-mkdir lib | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	touch widgets-sgi/depend | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	if [ -d ggi ] ; then touch ggi/depend ; fi | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 $@ | ||||
| @@ -272,6 +281,7 @@ linux-ggi linux-386-ggi: | ||||
| 	if [ -d xdemos ]   ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples ]  ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book ]     ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
| # if you change GGI_DEST please change it in ggimesa.conf, too. | ||||
| DESTDIR=/usr/local | ||||
| @@ -301,6 +311,8 @@ clean: | ||||
| 	-rm -f xdemos/*.o xdemos/*~ | ||||
| 	-rm -f samples/*.o samples/*~ | ||||
| 	-rm -f ggi/*.o ggi/demos/*.o ggi/*.a | ||||
| 	-rm -f widgets-sgi/*.o | ||||
| 	-rm -f widgets-mesa/*/*.o | ||||
|  | ||||
| # Remove everything that can be remade | ||||
| realclean: clean | ||||
| @@ -314,103 +326,104 @@ realclean: clean | ||||
|  | ||||
|  | ||||
|  | ||||
| DIRECTORY = Mesa-3.1 | ||||
| LIB_NAME = MesaLib-3.1beta3 | ||||
| DEMO_NAME = MesaDemos-3.1beta3 | ||||
| DIRECTORY = Mesa-3.2.1 | ||||
| LIB_NAME = MesaLib-3.2.1 | ||||
| DEMO_NAME = MesaDemos-3.2.1 | ||||
|  | ||||
|  | ||||
| LIB_FILES =	\ | ||||
| 	$(DIRECTORY)/Makefile*			\ | ||||
| 	$(DIRECTORY)/Make-config		\ | ||||
| 	$(DIRECTORY)/acconfig.h			\ | ||||
| 	$(DIRECTORY)/acinclude.m4		\ | ||||
| 	$(DIRECTORY)/aclocal.m4			\ | ||||
| 	$(DIRECTORY)/conf.h.in			\ | ||||
| 	$(DIRECTORY)/config.guess		\ | ||||
| 	$(DIRECTORY)/config.sub			\ | ||||
| 	$(DIRECTORY)/configure			\ | ||||
| 	$(DIRECTORY)/configure.in		\ | ||||
| 	$(DIRECTORY)/install-sh			\ | ||||
| 	$(DIRECTORY)/ltconfig			\ | ||||
| 	$(DIRECTORY)/ltmain.sh			\ | ||||
| 	$(DIRECTORY)/missing			\ | ||||
| 	$(DIRECTORY)/mkinstalldirs		\ | ||||
| 	$(DIRECTORY)/stamp-h.in			\ | ||||
| 	$(DIRECTORY)/configure			\ | ||||
| 	$(DIRECTORY)/docs/CONFIG		\ | ||||
| 	$(DIRECTORY)/docs/CONFORM		\ | ||||
| 	$(DIRECTORY)/docs/COPYING		\ | ||||
| 	$(DIRECTORY)/docs/COPYRIGHT		\ | ||||
| 	$(DIRECTORY)/docs/DEVINFO		\ | ||||
| 	$(DIRECTORY)/docs/IAFA-PACKAGE		\ | ||||
| 	$(DIRECTORY)/docs/INSTALL		\ | ||||
| 	$(DIRECTORY)/docs/INSTALL.GNU		\ | ||||
| 	$(DIRECTORY)/docs/README		\ | ||||
| 	$(DIRECTORY)/docs/README.*		\ | ||||
| 	$(DIRECTORY)/docs/RELNOTES		\ | ||||
| 	$(DIRECTORY)/docs/VERSIONS		\ | ||||
| 	$(DIRECTORY)/docs/*.spec		\ | ||||
| 	$(DIRECTORY)/bin/README			\ | ||||
| 	$(DIRECTORY)/bin/mklib*			\ | ||||
| 	$(DIRECTORY)/*.BAT			\ | ||||
| 	$(DIRECTORY)/*.bat			\ | ||||
| 	$(DIRECTORY)/descrip.mms		\ | ||||
| 	$(DIRECTORY)/mms-config			\ | ||||
| 	$(DIRECTORY)/xlib.opt			\ | ||||
| 	$(DIRECTORY)/STARTUP.MK			\ | ||||
| 	$(DIRECTORY)/mesawin32.mak		\ | ||||
| 	$(DIRECTORY)/Names.win			\ | ||||
| 	$(DIRECTORY)/win32-openstep.sh		\ | ||||
| 	$(DIRECTORY)/*.dja			\ | ||||
| 	$(DIRECTORY)/include/GL/Makefile.in	\ | ||||
| 	$(DIRECTORY)/include/GL/Makefile.am	\ | ||||
| 	$(DIRECTORY)/include/GL/dosmesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/foomesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/fxmesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/ggimesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/gl.h		\ | ||||
| 	$(DIRECTORY)/include/GL/gl_mangle.h	\ | ||||
| 	$(DIRECTORY)/include/GL/glu.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glu_mangle.h	\ | ||||
| 	$(DIRECTORY)/include/GL/glx.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glx_mangle.h	\ | ||||
| 	$(DIRECTORY)/include/GL/mglmesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/osmesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/svgamesa.h	\ | ||||
| 	$(DIRECTORY)/include/GL/wmesa.h		\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa.h		\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa_x.h	\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa_xf86.h	\ | ||||
| 	$(DIRECTORY)/include/GLView.h		\ | ||||
| 	$(DIRECTORY)/include/Makefile.in	\ | ||||
| 	$(DIRECTORY)/include/Makefile.am	\ | ||||
| 	$(DIRECTORY)/src/Makefile*		\ | ||||
| 	$(DIRECTORY)/src/descrip.mms		\ | ||||
| 	$(DIRECTORY)/src/mms_depend		\ | ||||
| 	$(DIRECTORY)/src/mesa.conf		\ | ||||
| 	$(DIRECTORY)/src/*.def			\ | ||||
| 	$(DIRECTORY)/src/depend			\ | ||||
| 	$(DIRECTORY)/src/*.[chS]		\ | ||||
| 	$(DIRECTORY)/src/Allegro/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/BeOS/*.cpp		\ | ||||
| 	$(DIRECTORY)/src/D3D/*.cpp		\ | ||||
| 	$(DIRECTORY)/src/D3D/*.CPP		\ | ||||
| 	$(DIRECTORY)/src/D3D/*.h		\ | ||||
| 	$(DIRECTORY)/src/D3D/*.H		\ | ||||
| 	$(DIRECTORY)/src/D3D/*.c		\ | ||||
| 	$(DIRECTORY)/src/D3D/*.C		\ | ||||
| 	$(DIRECTORY)/src/D3D/MAKEFILE		\ | ||||
| 	$(DIRECTORY)/src/D3D/*bat		\ | ||||
| 	$(DIRECTORY)/src/D3D/*DEF		\ | ||||
| 	$(DIRECTORY)/src/DOS/DEPEND.DOS		\ | ||||
| 	$(DIRECTORY)/src/DOS/*.c		\ | ||||
| 	$(DIRECTORY)/src/FX/Makefile.am		\ | ||||
| 	$(DIRECTORY)/src/FX/Makefile.in		\ | ||||
| 	$(DIRECTORY)/src/FX/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/FX/*.def		\ | ||||
| 	$(DIRECTORY)/src/FX/X86/Makefile.am	\ | ||||
| 	$(DIRECTORY)/src/FX/X86/Makefile.in	\ | ||||
| 	$(DIRECTORY)/src/FX/X86/*.[Shc]		\ | ||||
| 	$(DIRECTORY)/Makefile*					\ | ||||
| 	$(DIRECTORY)/Make-config				\ | ||||
| 	$(DIRECTORY)/acconfig.h					\ | ||||
| 	$(DIRECTORY)/acinclude.m4				\ | ||||
| 	$(DIRECTORY)/aclocal.m4					\ | ||||
| 	$(DIRECTORY)/conf.h.in					\ | ||||
| 	$(DIRECTORY)/config.guess				\ | ||||
| 	$(DIRECTORY)/config.sub					\ | ||||
| 	$(DIRECTORY)/configure					\ | ||||
| 	$(DIRECTORY)/configure.in				\ | ||||
| 	$(DIRECTORY)/install-sh					\ | ||||
| 	$(DIRECTORY)/ltconfig					\ | ||||
| 	$(DIRECTORY)/ltmain.sh					\ | ||||
| 	$(DIRECTORY)/missing					\ | ||||
| 	$(DIRECTORY)/mkinstalldirs				\ | ||||
| 	$(DIRECTORY)/stamp-h.in					\ | ||||
| 	$(DIRECTORY)/docs/CONFIG				\ | ||||
| 	$(DIRECTORY)/docs/CONFORM				\ | ||||
| 	$(DIRECTORY)/docs/COPYING				\ | ||||
| 	$(DIRECTORY)/docs/COPYRIGHT				\ | ||||
| 	$(DIRECTORY)/docs/DEVINFO				\ | ||||
| 	$(DIRECTORY)/docs/IAFA-PACKAGE				\ | ||||
| 	$(DIRECTORY)/docs/INSTALL				\ | ||||
| 	$(DIRECTORY)/docs/INSTALL.GNU				\ | ||||
| 	$(DIRECTORY)/docs/README				\ | ||||
| 	$(DIRECTORY)/docs/README.*				\ | ||||
| 	$(DIRECTORY)/docs/RELNOTES*				\ | ||||
| 	$(DIRECTORY)/docs/VERSIONS				\ | ||||
| 	$(DIRECTORY)/docs/*.spec				\ | ||||
| 	$(DIRECTORY)/bin/README					\ | ||||
| 	$(DIRECTORY)/bin/mklib*					\ | ||||
| 	$(DIRECTORY)/*.BAT					\ | ||||
| 	$(DIRECTORY)/*.bat					\ | ||||
| 	$(DIRECTORY)/descrip.mms				\ | ||||
| 	$(DIRECTORY)/mms-config					\ | ||||
| 	$(DIRECTORY)/xlib.opt					\ | ||||
| 	$(DIRECTORY)/STARTUP.MK					\ | ||||
| 	$(DIRECTORY)/mesawin32.mak				\ | ||||
| 	$(DIRECTORY)/Names.win					\ | ||||
| 	$(DIRECTORY)/win32-openstep.sh				\ | ||||
| 	$(DIRECTORY)/common.dja					\ | ||||
| 	$(DIRECTORY)/include/GL/Makefile.in			\ | ||||
| 	$(DIRECTORY)/include/GL/Makefile.am			\ | ||||
| 	$(DIRECTORY)/include/GL/amesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/dosmesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/foomesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/fxmesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/ggimesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/gl.h				\ | ||||
| 	$(DIRECTORY)/include/GL/gl_mangle.h			\ | ||||
| 	$(DIRECTORY)/include/GL/glu.h				\ | ||||
| 	$(DIRECTORY)/include/GL/glu_mangle.h			\ | ||||
| 	$(DIRECTORY)/include/GL/glx.h				\ | ||||
| 	$(DIRECTORY)/include/GL/glx_mangle.h			\ | ||||
| 	$(DIRECTORY)/include/GL/mesa_wgl.h			\ | ||||
| 	$(DIRECTORY)/include/GL/mglmesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/osmesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/svgamesa.h			\ | ||||
| 	$(DIRECTORY)/include/GL/wmesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa_x.h			\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa_xf86.h			\ | ||||
| 	$(DIRECTORY)/include/GLView.h				\ | ||||
| 	$(DIRECTORY)/include/Makefile.in			\ | ||||
| 	$(DIRECTORY)/include/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/Makefile*				\ | ||||
| 	$(DIRECTORY)/src/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mms_depend				\ | ||||
| 	$(DIRECTORY)/src/mesa.conf				\ | ||||
| 	$(DIRECTORY)/src/*.def					\ | ||||
| 	$(DIRECTORY)/src/depend					\ | ||||
| 	$(DIRECTORY)/src/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/Allegro/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/BeOS/*.cpp				\ | ||||
| 	$(DIRECTORY)/src/D3D/*.cpp				\ | ||||
| 	$(DIRECTORY)/src/D3D/*.CPP				\ | ||||
| 	$(DIRECTORY)/src/D3D/*.h				\ | ||||
| 	$(DIRECTORY)/src/D3D/*.H				\ | ||||
| 	$(DIRECTORY)/src/D3D/*.c				\ | ||||
| 	$(DIRECTORY)/src/D3D/*.C				\ | ||||
| 	$(DIRECTORY)/src/D3D/MAKEFILE				\ | ||||
| 	$(DIRECTORY)/src/D3D/*bat				\ | ||||
| 	$(DIRECTORY)/src/D3D/*DEF				\ | ||||
| 	$(DIRECTORY)/src/DOS/DEPEND.DOS				\ | ||||
| 	$(DIRECTORY)/src/DOS/*.c				\ | ||||
| 	$(DIRECTORY)/src/FX/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/FX/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/FX/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/FX/*.def				\ | ||||
| 	$(DIRECTORY)/src/FX/X86/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/FX/X86/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/FX/X86/*.[Shc]				\ | ||||
| 	$(DIRECTORY)/src/GGI/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/GGI/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/*.[ch]				\ | ||||
| @@ -430,55 +443,91 @@ LIB_FILES =	\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.am	\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.in	\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/mesa/*.h		\ | ||||
| 	$(DIRECTORY)/src/KNOWN_BUGS		\ | ||||
| 	$(DIRECTORY)/src/MGL/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/MGL/*.txt		\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.am	\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.in	\ | ||||
| 	$(DIRECTORY)/src/OSmesa/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/S3/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/S3/*.def		\ | ||||
| 	$(DIRECTORY)/src/S3/*.mak		\ | ||||
| 	$(DIRECTORY)/src/S3/*.rc		\ | ||||
| 	$(DIRECTORY)/src/SVGA/Makefile.am	\ | ||||
| 	$(DIRECTORY)/src/SVGA/Makefile.in	\ | ||||
| 	$(DIRECTORY)/src/SVGA/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/Windows/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/Windows/*.def		\ | ||||
| 	$(DIRECTORY)/src/X/Makefile.am		\ | ||||
| 	$(DIRECTORY)/src/X/Makefile.in		\ | ||||
| 	$(DIRECTORY)/src/X/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/X86/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/X86/Makefile.am	\ | ||||
| 	$(DIRECTORY)/src/X86/Makefile.in	\ | ||||
| 	$(DIRECTORY)/src/X86/*.m4		\ | ||||
| 	$(DIRECTORY)/src/X86/*.S		\ | ||||
| 	$(DIRECTORY)/src/*.dja			\ | ||||
| 	$(DIRECTORY)/src-glu/README[12]		\ | ||||
| 	$(DIRECTORY)/src-glu/Makefile*		\ | ||||
| 	$(DIRECTORY)/src-glu/descrip.mms	\ | ||||
| 	$(DIRECTORY)/src-glu/mms_depend		\ | ||||
| 	$(DIRECTORY)/src-glu/*.def		\ | ||||
| 	$(DIRECTORY)/src-glu/*.dja		\ | ||||
| 	$(DIRECTORY)/src-glu/depend		\ | ||||
| 	$(DIRECTORY)/src-glu/*.[ch]		\ | ||||
| 	$(DIRECTORY)/widgets-mesa		\ | ||||
| 	$(DIRECTORY)/widgets-sgi		\ | ||||
| 	$(DIRECTORY)/util/README		\ | ||||
| 	$(DIRECTORY)/util/Makefile.am		\ | ||||
| 	$(DIRECTORY)/util/Makefile.in		\ | ||||
| 	$(DIRECTORY)/util/*.[ch]		\ | ||||
| 	$(DIRECTORY)/util/sampleMakefile	\ | ||||
| 	$(DIRECTORY)/BeOS/Makefile		\ | ||||
| 	$(DIRECTORY)/BeOS/*.cpp			 | ||||
|  | ||||
| # old stuff | ||||
| #	$(DIRECTORY)/Win32			\ | ||||
| #	$(DIRECTORY)/win32 | ||||
|  | ||||
| #	$(DIRECTORY)/OpenStep			\ | ||||
| # | ||||
| # | ||||
| 	$(DIRECTORY)/src/KNOWN_BUGS				\ | ||||
| 	$(DIRECTORY)/src/MGL/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/MGL/*.txt				\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/OSmesa/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/S3/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/S3/*.def				\ | ||||
| 	$(DIRECTORY)/src/S3/*.mak				\ | ||||
| 	$(DIRECTORY)/src/S3/*.rc				\ | ||||
| 	$(DIRECTORY)/src/SVGA/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/SVGA/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/SVGA/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/Windows/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/Windows/*.def				\ | ||||
| 	$(DIRECTORY)/src/X/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/X/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/X/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/X86/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/X86/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/X86/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/X86/*.m4				\ | ||||
| 	$(DIRECTORY)/src/X86/*.S				\ | ||||
| 	$(DIRECTORY)/src-glu/README[12]				\ | ||||
| 	$(DIRECTORY)/src-glu/Makefile*				\ | ||||
| 	$(DIRECTORY)/src-glu/descrip.mms			\ | ||||
| 	$(DIRECTORY)/src-glu/mms_depend				\ | ||||
| 	$(DIRECTORY)/src-glu/*.def				\ | ||||
| 	$(DIRECTORY)/src-glu/depend				\ | ||||
| 	$(DIRECTORY)/src-glu/*.[ch]				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/ChangeLog			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/INSTALL			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/README			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/TODO				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/configure			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/ChangeLog		\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Cube			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Ed			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Makefile.in		\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Mcube			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Tea			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/*.[ch]			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/events			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/include/GL/ChangeLog		\ | ||||
| 	$(DIRECTORY)/widgets-mesa/include/GL/*.h		\ | ||||
| 	$(DIRECTORY)/widgets-mesa/include/GL/Makefile.in	\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/ChangeLog			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/GL*			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/Makefile.in		\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/Mesa*			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/src/ChangeLog			\ | ||||
| 	$(DIRECTORY)/widgets-sgi/*.[ch]				\ | ||||
| 	$(DIRECTORY)/widgets-sgi/Makefile*			\ | ||||
| 	$(DIRECTORY)/widgets-sgi/README				\ | ||||
| 	$(DIRECTORY)/util/README				\ | ||||
| 	$(DIRECTORY)/util/Makefile.am				\ | ||||
| 	$(DIRECTORY)/util/Makefile.in				\ | ||||
| 	$(DIRECTORY)/util/*.[ch]				\ | ||||
| 	$(DIRECTORY)/util/sampleMakefile			\ | ||||
| 	$(DIRECTORY)/vms/analyze_map.com			\ | ||||
| 	$(DIRECTORY)/vms/xlib.opt				\ | ||||
| 	$(DIRECTORY)/vms/xlib_share.opt				\ | ||||
| 	$(DIRECTORY)/BeOS/Makefile				\ | ||||
| 	$(DIRECTORY)/BeOS/*.cpp					\ | ||||
| 	$(DIRECTORY)/WIN32/NMAKE.MAK				\ | ||||
| 	$(DIRECTORY)/WIN32/NMAKE.MIF				\ | ||||
| 	$(DIRECTORY)/WIN32/RES/*rc				\ | ||||
| 	$(DIRECTORY)/WIN32/RES/*def				\ | ||||
| 	$(DIRECTORY)/WIN32/RULES/lib.*				\ | ||||
| 	$(DIRECTORY)/WIN32/RULES/progs.*			\ | ||||
| 	$(DIRECTORY)/macos/README				\ | ||||
| 	$(DIRECTORY)/macos/gli_api/*.h				\ | ||||
| 	$(DIRECTORY)/macos/include-mac/*.h			\ | ||||
| 	$(DIRECTORY)/macos/libraries/*.stub			\ | ||||
| 	$(DIRECTORY)/macos/libraries/*Stub			\ | ||||
| 	$(DIRECTORY)/macos/projects/*.mcp			\ | ||||
| 	$(DIRECTORY)/macos/projects/*.exp			\ | ||||
| 	$(DIRECTORY)/macos/projects/*.h				\ | ||||
| 	$(DIRECTORY)/macos/resources/*.c			\ | ||||
| 	$(DIRECTORY)/macos/resources/*.r			\ | ||||
| 	$(DIRECTORY)/macos/resources/*.rsrc			\ | ||||
| 	$(DIRECTORY)/macos/src-agl/*.exp			\ | ||||
| 	$(DIRECTORY)/macos/src-agl/*.[ch]			\ | ||||
| 	$(DIRECTORY)/macos/src-gli/*.[ch]			\ | ||||
| 	$(DIRECTORY)/OpenStep					\ | ||||
|  | ||||
|  | ||||
| DEMO_FILES =	\ | ||||
| @@ -509,21 +558,21 @@ DEMO_FILES =	\ | ||||
| 	$(DIRECTORY)/samples/Makefile*		\ | ||||
| 	$(DIRECTORY)/samples/README		\ | ||||
| 	$(DIRECTORY)/samples/*.c		\ | ||||
| 	$(DIRECTORY)/samples/*.dja		\ | ||||
| 	$(DIRECTORY)/3Dfx			\ | ||||
| 	$(DIRECTORY)/mtdemos			\ | ||||
| 	$(DIRECTORY)/ggi | ||||
|  | ||||
|  | ||||
| lib_tar: | ||||
| 	cp Makefile.X11 Makefile ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(LIB_NAME).tar $(LIB_FILES) ; \ | ||||
| 	tar --exclude CVS -c -v -f $(LIB_NAME).tar $(LIB_FILES) ; \ | ||||
| 	gzip $(LIB_NAME).tar ; \ | ||||
| 	mv $(LIB_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| demo_tar: | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(DEMO_NAME).tar $(DEMO_FILES) ; \ | ||||
| 	tar --exclude CVS -c -v -f $(DEMO_NAME).tar $(DEMO_FILES) ; \ | ||||
| 	gzip $(DEMO_NAME).tar ; \ | ||||
| 	mv $(DEMO_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
|   | ||||
| @@ -16,11 +16,11 @@ Status | ||||
|  | ||||
| Version | ||||
|  | ||||
|     $Id: MESA_resize_buffers.spec,v 1.1 1999/07/20 00:30:41 brianp Exp $ | ||||
|     $Id: MESA_resize_buffers.spec,v 1.1.2.1 2000/04/04 23:28:00 brianp Exp $ | ||||
|  | ||||
| Number | ||||
|  | ||||
|     XXX none assigned | ||||
|     196 | ||||
|  | ||||
| Dependencies | ||||
|  | ||||
|   | ||||
| @@ -16,11 +16,11 @@ Status | ||||
|  | ||||
| Version | ||||
|  | ||||
|     $Id: MESA_window_pos.spec,v 1.1 1999/07/20 00:30:41 brianp Exp $ | ||||
|     $Id: MESA_window_pos.spec,v 1.1.2.1 2000/04/04 23:28:00 brianp Exp $ | ||||
|  | ||||
| Number | ||||
|  | ||||
|     XXX non assigned | ||||
|     197 | ||||
|  | ||||
| Dependencies | ||||
|  | ||||
|   | ||||
| @@ -1,13 +1,8 @@ | ||||
|  | ||||
|                      3Dfx Glide device driver for Mesa 3.1 | ||||
|                      3Dfx Glide device driver for Mesa 3.2 | ||||
| 				(see below for FAQ) | ||||
|  | ||||
|  | ||||
| This software is distributed under the terms of the GNU Library | ||||
| General Public License, see the LICENSE file for details. | ||||
|  | ||||
|  | ||||
|  | ||||
| What do you need ? | ||||
| ------------------ | ||||
|  | ||||
| @@ -189,9 +184,9 @@ Doing more with Mesa & Linux Glide: | ||||
| 	   quality. However you can use any visual depth supported by X. | ||||
|  | ||||
| 	2. Set the following environment variables: | ||||
| 		export MESA_GLX_FX="window"	// to enable window rendering | ||||
| 		export SST_VGA_PASS=1	// to stop video signal switching | ||||
| 		export SST_NOSHUTDOWN=1	// to stop video signal switching | ||||
| 		export MESA_GLX_FX="window"	# to enable window rendering | ||||
| 		export SST_VGA_PASS=1	# to stop video signal switching | ||||
| 		export SST_NOSHUTDOWN=1	# to stop video signal switching | ||||
| 	    OR | ||||
| 		setenv MESA_GLX_FX window | ||||
| 		setenv SST_VGA_PASS 1 | ||||
| @@ -327,6 +322,11 @@ The Mesa/Voodoo Environment Variables: | ||||
| 		export MESA_FX_INFO=1 | ||||
|           you will get some useful statistic. | ||||
|  | ||||
|         - If you define the env. var. MESA_FX_NO_SIGNALS: | ||||
| 		export MESA_FX_NO_SIGNALS=1 | ||||
|           Mesa/FX will not install atexit() or signal() handlers. | ||||
|  | ||||
|  | ||||
|  | ||||
| Know BUGS and Problems: | ||||
| ----------------------- | ||||
| @@ -541,9 +541,7 @@ No because the Linux Glide doesn't (yet) support the Voodoo Rush. | ||||
| a binary copy of the Mesa in order to make the software | ||||
| working out of the box ? | ||||
|  | ||||
| Yes, you have simply to include some informations about authors | ||||
| and where the library sources are available (check the LICENSE | ||||
| file for more informations about the GNU GPL). | ||||
| Yes. | ||||
|  | ||||
|  | ||||
| 11. Which is the best make target for compiling the Mesa for | ||||
|   | ||||
| @@ -28,7 +28,7 @@ working.  No optimizations have been made at this time. | ||||
|  | ||||
| Compiling | ||||
|  | ||||
| Simply cd to the Mesa-3.x directory and type "make beos-r4". | ||||
| In the Mesa-3.x directory type "make -f Makefile.X11 beos-r4". | ||||
| When it finishes the libMesaGL.so and libMesaGLU.so libraries for | ||||
| BeOS will be in the Mesa-3.x/lib/ directory. | ||||
|  | ||||
| @@ -99,4 +99,4 @@ of February, 1999. | ||||
|  | ||||
|  | ||||
| ---------------------------------------------------------------------- | ||||
| $Id: README.BEOS,v 1.5 1999/03/03 02:34:04 brianp Exp $ | ||||
| $Id: README.BEOS,v 1.5.6.1 1999/11/27 01:39:50 brianp Exp $ | ||||
|   | ||||
| @@ -1,120 +1,50 @@ | ||||
| August 30, 1998 -- Paul Garceau (pgarceau@teleport.com) | ||||
| August 30, 1998 -- Paul Garceau | ||||
| Updated January 13, 2000 -- Paul Garceau (pgarceau@teleport.com) | ||||
|  | ||||
| DISCLAIMER:  I make this extension to the Mesa 3-D Graphics Library as a service | ||||
| DISCLAIMER:  I make this port of the Mesa 3-D Graphics Library as a service | ||||
| to the general public.  I can, in no way support or make any guarantee that the | ||||
| EGCS-Mingw32 build or any Gnu-Win32 build will work for your system. The | ||||
| associated packages and batch files I have included as part of the EGCS-Mingw32 | ||||
| extension are provided "As-is" with out any guarantee of support or functionality | ||||
| from the author of this EGCS-Mingw32 native windows port of the Mesa 3-D Graphics | ||||
| Library. | ||||
| build will work for your system. | ||||
|  | ||||
| 	The associated packages and batch files I have included as part of the GCC-2.95.2/Mingw32 extension are provided "As-is" with out any guarantee of support or functionality from this author. | ||||
|  | ||||
| 	Feel free to modify or change things as you see fit, just remember that | ||||
| I can't support any modifications you might want to make to the files which I | ||||
| have included OR the lgpl protected Mesa 3-D Graphics Library. | ||||
|  | ||||
| 	I recommend using GCC-2.95.2/Mingw32 which is available at Mumit Khans' ftp site: | ||||
|  | ||||
| 	EGCS-Mingw32 Beta 3.08 Archive Manifest: | ||||
| 		mingw32.bat | ||||
| 		src/makefile.nt4 | ||||
| 		src/wmesa.c | ||||
| 		src-glu/makefile.nt4 | ||||
| 		(ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/) | ||||
|  | ||||
| ############### | ||||
| 	This build has been tested under WinNT4/SP6.  Win9x and WinNT5 remain untested by me.  I have not tested any of the demos included with Mesa3d. | ||||
|  | ||||
| Greetings, | ||||
| 	I recommend using the GCC-2.95.2/Mingw32. | ||||
|  | ||||
| 	In order to build the Mingw32 set of Mesa 3-D Graphics Library for Beta3.08 | ||||
| it will be necessary for you to use the Dos or Command Prompt that is available | ||||
| on most of the i86 based MS Windows machines.  Also, I believe that this build | ||||
| will run on Win95, Win98, WinNT4 and WinNT5. | ||||
|  | ||||
| 	I haven't tested Win95/98 or WinNT5.  This build was generated under | ||||
| WinNT4 with SP3 installed. | ||||
|  | ||||
| 	This has not been tested under any systems outside of | ||||
| a WinNT4 Workstation with EGCS-Mingw32 toolchain, v.1.0.2 installed. | ||||
|  | ||||
| 	EGCS-Mingw32 uses a variation of gcc to handle its build.  The Mesa 3-D | ||||
| Graphics Library build that I have generated is based, in small part, on the | ||||
| Cygwin32 build and associated makefiles that Stephane Rehel (rehel@worldnet.fr) | ||||
| defined back in 1997.  The EGCS-Mingw32 toolchain is capable of generating | ||||
| native windows code and, as of the date of this readme, can be obtained from: | ||||
|  | ||||
| 	http://www.xraylith.wisc.edu/~khan/software/gnu-win32/egcs-mingw32-102.html | ||||
| 	ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/gcc-2.95.2 | ||||
|  | ||||
| 	Much thanks to the combined efforts of Mumit Khan, Jan-Jaap Vanderhagen | ||||
| and Colin Peters for making it possible for the EGCS-Mingw32 toolchain to exist. | ||||
| and Colin Peters for making it possible for the Mingw32 toolchain to exist.  Also, thanks go out to Stephane Rehel for the work that was completed on the Cygwin build. | ||||
|  | ||||
| Installing EGCS-Mingw32 Build Revisions: | ||||
| Installing GCC-2.95.2/Mingw32 Build: | ||||
|  | ||||
| 	To install the makefile and source revisions incorporated with this build | ||||
| of the Mesa 3-D Graphics Library, you'll have to use a version of winzip.  I am | ||||
| in the process of finding a suitable Win32 compatible tar executable so that if | ||||
| you don't have winzip, you can still decompress the files into their respective | ||||
| folders/directories. | ||||
| 	a) Open the file archive (either tar.gz or .zip extensions) | ||||
|  | ||||
| 	a) Move the mingw32.zip file to the top level of the hard drive on your | ||||
| system. | ||||
| 	b) Decide the directory you want to move the archived files to. | ||||
|  | ||||
| 	b) Copy all of the Beta 3.08 src/windows files to the src/ directory. | ||||
| 	d) Extract the files from the archive. | ||||
| 	 | ||||
| 	e) Edit the mingw32.bat file to accomodate your choice of directory structure. | ||||
|  | ||||
| 	b) Open the Winzip file | ||||
|  | ||||
| 	c) Verify that the files will be properly extracted. | ||||
|  | ||||
| 	d) Extract the files with the Winzip "Overwrite" and "Use Folder Names" | ||||
| 	   options enabled. | ||||
|  | ||||
| 	The zip file directory structure extraction defaults to the top level of | ||||
| the hard drive where the mingw32.zip file exists unless otherwise instructed by | ||||
| you. | ||||
|  | ||||
| 	The version of wmesa.c included with the mingw32 archive needs to replace | ||||
| the current version of the Beta 3.08 wmesa.c file in order for the egcs-mingw32 | ||||
| build to work.  This is because the original Win32 stuff assumes that the glut | ||||
| utilities are to be installed.  The Glut utilities are not part of the | ||||
| egcs-mingw32 build for Beta 3.08. | ||||
|  | ||||
|  | ||||
| Build Considerations: | ||||
|  | ||||
| 	In order to get the build to work, I needed to create a special makefile | ||||
| for each library which the Mesa 3-D Graphics Library requires since there is no | ||||
| comparable make-config/config on a native windows platform. | ||||
|  | ||||
| 	Since I was only creating a few of the possible libraries for  | ||||
| Mesa (gl, glu), I only created the new make files in their respective libraries | ||||
| src, src-glu).  For libMesaaux.a. you will find a makefile for it in the | ||||
| src-aux directory.  libMesatk.a and libglut.a were not ported. | ||||
|  | ||||
| 	The build itself is a .bat based build and uses Gnu Make,Version 3.76.1 to | ||||
| process the makefiles noted above.  The build must be run from the directory | ||||
| where the mingw32.bat file is.  You can get the binary version of Make 3.76.1 | ||||
| from Jan-Jaap van der Heijden's site in Germany: | ||||
|  | ||||
| 	http://agnes.dida.physik.uni-essen.de/~janjaap/mingw32/download.html | ||||
|  | ||||
| 	It was necessary to modify some source code, specifically the source code | ||||
| in the src-glu directory.  I needed to modify nurbs.c, quadric.c and tess.c in | ||||
| order to get them to work using the EGCS-Mingw32 toolchain. | ||||
|  | ||||
| 	The original EGCS-Mingw32 Toolchain, is available from: | ||||
|  | ||||
| 	http://www.xraylith.wisc.edu/~khan/software/gnu-win32/egcs-mingw32-102.html	 | ||||
| 		%mesaroot%:	This is your root directory (Mesa-3.2) | ||||
| 		%mesasrc%:	This is the Mesa-3.2 src directory (Mesa-3.2\src) | ||||
| 		%mesalib%:	This is where the build will put libGL.a and libGLU.a | ||||
|  | ||||
| Running the Build: | ||||
|  | ||||
| 	Ok, now that we've got the basics out of the way, follows is all you need | ||||
| to do in order to build the EGCS-Mingw32 version of libMesaGL.a and libMesaGLU.a: | ||||
|  | ||||
| 	Open your Command Prompt/Dos prompt. | ||||
| 	Go to your Mesa-3.0 beta 'root' directory. | ||||
| 		This is the same directory that the Mesa mingw32.zip file was | ||||
| 		originally stored in if you've installed the Mesa-3.0 beta 3-D | ||||
| 		Graphics Library source as outlined in the "readme" file included | ||||
| 		with the Mesa-3.0 beta distribution. | ||||
| 	Open your Command Prompt or MS-DOS prompt. | ||||
| 	Go to your Mesa-3.2 'root' directory | ||||
| 	At the command line type: mingw32 | ||||
| 		mingw32 is the .bat file that actually does the build. | ||||
|  | ||||
| 	That's all there is to it. | ||||
|  | ||||
| 	Enjoy! | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,7 @@ | ||||
|  | ||||
| 			Mesa 3.0 MITS Information | ||||
|  | ||||
|  | ||||
| This software is distributed under the terms of the GNU Library | ||||
| General Public License, see the LICENSE file for details. | ||||
| [The MITS code hasn't been update for Mesa 3.1 and may no longer work] | ||||
|  | ||||
|  | ||||
| This document is a preliminary introduction to help you get | ||||
|   | ||||
| @@ -1,33 +1,54 @@ | ||||
|  | ||||
|                          Mesa 3.0 Unix/X11 Information | ||||
|                          Mesa 3.2 Unix/X11 Information | ||||
|  | ||||
|  | ||||
|  | ||||
| Installation | ||||
| ============ | ||||
|  | ||||
| To compile the library, first type 'make' alone to see the list of system | ||||
| configurations currently supported.  If you see your configuration on the | ||||
| list, type 'make <config>'.  Most popular Unix/X workstations are currently | ||||
| supported. | ||||
| There are two ways to compile Mesa on Unix/X11 systems: | ||||
|  | ||||
| 1. The old way: | ||||
|     First type 'make' alone to see the list of system | ||||
|     configurations currently supported.  If you see your configuration on the | ||||
|     list, type 'make <config>'.  Most popular Unix/X workstations are currently | ||||
|     supported. | ||||
|  | ||||
|     If your system configuration is not listed by 'make', you'll have to modify | ||||
|     the top-level Makefile and Make-config files.  There are instructions in | ||||
|     each file. | ||||
|  | ||||
|  | ||||
| 2. The new way: | ||||
|     Type './configure' and then 'make'.  This uses GNU autoconfig. | ||||
|     See docs/INSTALL for more details. | ||||
|  | ||||
|  | ||||
| The top-level makefile will execute the makefiles in a number of sub- | ||||
| directories.  When finished, the Mesa libraries will be in the Mesa-2.6/lib/ | ||||
| directories.  When finished, the Mesa libraries will be in the Mesa-3.2/lib/ | ||||
| directory.  A few GLUT demos in the demos/ directory should be ready to run. | ||||
|  | ||||
| If you also downloaded and unpacked the demos there should be executables | ||||
| in the "xdemos/", "samples/", and "book/" directories for you to try out. | ||||
| If you only want to compile the contents of one subdirectory you can 'cd' | ||||
| to that directory and type 'make <config>' there. | ||||
|  | ||||
| If your system configuration is not listed by 'make', you'll have to modify | ||||
| the top-level Makefile and Make-config files.  There are instructions in | ||||
| each file. | ||||
|  | ||||
| If you have compilation problems you should try to fix them and return the | ||||
| patches to the author. | ||||
|  | ||||
|  | ||||
| Notes on assembly language optimizations: | ||||
|  | ||||
|    When using the old-style Makefiles, you can specify a configuration | ||||
|    that uses X86 assembly language optimizations (linux-3dnow for example). | ||||
|  | ||||
|    The detection of MMX, 3DNow!, PIII/SSE, etc capability is done at | ||||
|    runtime.  That means you can compile Mesa for 3DNow! optimizations | ||||
|    even if you don't have an AMD CPU. | ||||
|  | ||||
|    However, your Linux binutils and assembler must understand the | ||||
|    special instructions in order to compile them.  If you have | ||||
|    compilation problems, try upgrading your binutils. | ||||
|  | ||||
|  | ||||
| Header and library files: | ||||
|    After you've compiled Mesa and tried the demos I recommend the following | ||||
|    procedure for "installing" Mesa. | ||||
| @@ -120,7 +141,7 @@ Xt/Motif Widgets: | ||||
|  | ||||
| Togl: | ||||
|    Togl is an OpenGL/Mesa widget for Tcl/Tk. | ||||
|    See http://www.ssec.wisc.edu/~brianp/Togl.html for more information. | ||||
|    See http://togl.sourceforge.net for more information. | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -239,6 +260,7 @@ Extensions: | ||||
|    The following OpenGL GLX extensions are currently implemented: | ||||
|  | ||||
|       GLX_EXT_visual_info - GLX visual and transparent pixel extension | ||||
|       GLX_EXT_visual_rating - GLX visual caveats | ||||
|  | ||||
|    For detailed information about the extensions see www.opengl.org | ||||
|  | ||||
| @@ -301,4 +323,4 @@ Summary of X-related environment variables: | ||||
|  | ||||
|  | ||||
| ---------------------------------------------------------------------- | ||||
| $Id: README.X11,v 3.3 1999/09/15 16:39:01 brianp Exp $ | ||||
| $Id: README.X11,v 3.3.2.4 2000/04/04 15:13:41 brianp Exp $ | ||||
|   | ||||
							
								
								
									
										146
									
								
								docs/RELNOTES-3.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								docs/RELNOTES-3.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | ||||
|  | ||||
|                          Mesa 3.1 release notes | ||||
|  | ||||
|                              PLEASE READ!!!! | ||||
|  | ||||
|  | ||||
| New copyright | ||||
| ------------- | ||||
|  | ||||
| Mesa 3.1 will be distributed under an XFree86-style copyright instead | ||||
| of the GNU LGPL. | ||||
|  | ||||
|  | ||||
| New directories | ||||
| --------------- | ||||
|  | ||||
| All documentation files are now in the docs/ directory. | ||||
| All shell scripts are now in the bin/ directory. | ||||
|  | ||||
|  | ||||
| New library names | ||||
| ----------------- | ||||
|  | ||||
| Formerly, the main Mesa library was named libMesaGL.so (or libMesaGL.a) | ||||
| and the GLU library was named libMesaGLU.so (or libMesaGLU.a). | ||||
|  | ||||
| Now, the main library is named libGL.so (or libGL.a) and the GLU library | ||||
| is named libGLU.so (or libGLU.a). | ||||
|  | ||||
| The change allows Mesa to be more easily substituted for OpenGL. | ||||
| Specifically, the linker/loader on some Unix-like systems won't | ||||
| allow libMesaGL.so to be used instead of libGL.so if the application | ||||
| was linked with the former. | ||||
|  | ||||
| Warning: if you have another OpenGL implementation installed on your | ||||
| system (i.e. you have another OpenGL libGL.so) you'll have to be | ||||
| carefull about which library (OpenGL or Mesa) you link against.  Be | ||||
| aware of -L linker flags and the value of the LD_LIBRARY_PATH environment | ||||
| variable. | ||||
|  | ||||
|  | ||||
| New library versioning | ||||
| ---------------------- | ||||
|  | ||||
| Previously, the Mesa GL library was named libMesaGL.so.3.0 | ||||
| To better support Linux/OpenGL standards, the Mesa GL library is now | ||||
| named libGL.so.1.2.030100  This indicates version 1.2 of the OpenGL spec | ||||
| and Mesa implementation 3.1.0 | ||||
|  | ||||
| In the long term this will allow better interoperability with other | ||||
| OpenGL implementations, especially on Linux.  In the short term, | ||||
| OpenGL apps may have to be relinked to use the new library naming. | ||||
|  | ||||
|  | ||||
|  | ||||
| New makefiles | ||||
| ------------- | ||||
|  | ||||
| The old Makefiles found in the various directories have been renamed | ||||
| to Makefile.X11 in order to prevent filename collisions with autoconfig- | ||||
| generated Makefiles. | ||||
|  | ||||
| The top-level Makefile simply includes Makefile.X11 | ||||
| If your top-level Makefile get's overwritten/destroyed you can restore | ||||
| it by copying Makefile.X11 to Makefile | ||||
|  | ||||
|  | ||||
| New extensions | ||||
| -------------- | ||||
|  | ||||
| GL_EXT_stencil_wrap | ||||
| 	Implements two new stencil operations: GL_INCR_WRAP_EXT and | ||||
| 	GL_DECR_WRAP_EXT which allow stencil increment and decrement | ||||
| 	without clamping. | ||||
|  | ||||
| GL_INGR_blend_func_separate | ||||
| 	Allows specification of blend factors for RGB and Alpha independently. | ||||
| 	(INGR = Intergraph) | ||||
|  | ||||
| GL_ARB_multitexture | ||||
| 	Multiple simultaneous textures.  (ARB = Architecture Review Board) | ||||
|  | ||||
| GL_NV_texgen_reflection | ||||
| 	nVidia texgen extension for better reflection mapping. | ||||
|  | ||||
| GL_PGI_misc_hints | ||||
| 	Assorted transformation hints. | ||||
|  | ||||
| GL_EXT_compiled_vertex_array | ||||
| 	Compiled vertex arrays. | ||||
|  | ||||
| GL_EXT_clip_volume_hint | ||||
| 	Allows one to disable clip volume (frustum) testing. | ||||
|  | ||||
|  | ||||
|  | ||||
| Extensions removed | ||||
| ------------------ | ||||
|  | ||||
| GL_EXT_multitexture - obsolete in favor of GL_ARB_multitexture | ||||
|  | ||||
|  | ||||
|  | ||||
| Config file | ||||
| ----------- | ||||
|  | ||||
| By default, /etc/mesa.conf will be read when Mesa starts.  This | ||||
| file controls default hints, enable/disable of extensions, and | ||||
| more.  See the CONFIG file for documentation. | ||||
|  | ||||
|  | ||||
|  | ||||
| Optimizations | ||||
| ------------- | ||||
|  | ||||
| Keith Whitwell has contributed significant optimizations to Mesa's | ||||
| vertex transformation code.  Basically, the whole transformation | ||||
| stage of Mesa has been rewritten. | ||||
|  | ||||
| It's impossible to give a speedup factor.  You'll just have to | ||||
| try your app and see how it performs. | ||||
|  | ||||
|  | ||||
|  | ||||
| Device Driver changes | ||||
| --------------------- | ||||
|  | ||||
| A bunch of new device driver functions have been added.  See src/dd.h | ||||
| Keith Harrison contributed many of them.  I've been planning on adding | ||||
| a bunch of functions like these to make writing hardware drivers easier. | ||||
| More such function will probably be added in the near future. | ||||
|  | ||||
|  | ||||
|  | ||||
| Miscellaneous | ||||
| ------------- | ||||
|  | ||||
| util/glstate.c has some handy functions for debugging.  Basically, it | ||||
| offers a simple function for printing GL state variables.  It's not | ||||
| finished yet.  There's a LOT more GLenum records to be added (see the | ||||
| code).  Anyone want to help? | ||||
|  | ||||
|  | ||||
|  | ||||
| ---------------------------------------------------------------------- | ||||
| $Id: RELNOTES-3.1,v 1.1.2.1 2000/02/22 17:56:56 brianp Exp $ | ||||
							
								
								
									
										12
									
								
								docs/RELNOTES-3.2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								docs/RELNOTES-3.2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
|  | ||||
|                          Mesa 3.2 release notes | ||||
|  | ||||
|                              PLEASE READ!!!! | ||||
|  | ||||
|  | ||||
| Mesa 3.2 is a stabilization of the Mesa 3.1 release.  No new features | ||||
| have been added.  For a list of bug fixes please read the VERSIONS file. | ||||
|  | ||||
|  | ||||
| ---------------------------------------------------------------------- | ||||
| $Id: RELNOTES-3.2,v 1.1.2.1 2000/04/06 02:34:31 brianp Exp $ | ||||
							
								
								
									
										32
									
								
								docs/RELNOTES-3.2.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								docs/RELNOTES-3.2.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
|  | ||||
|                          Mesa 3.2.1 release notes | ||||
|  | ||||
|                              PLEASE READ!!!! | ||||
|  | ||||
|  | ||||
|  | ||||
| The Mesa 3.2.1 release mainly just fixes bugs since the 3.2 release. | ||||
| See the VERSIONS file for the exact list. | ||||
|  | ||||
|  | ||||
|  | ||||
| GLU Polygon Tessellator | ||||
| ----------------------- | ||||
|  | ||||
| The GLU tessellator has been reverted back to the version included | ||||
| with Mesa 3.0 since it's more stable.  The Mesa 3.1/3.2 tessellator | ||||
| implemented the GLU 1.3 specification but suffered from a number of | ||||
| bugs. | ||||
|  | ||||
| Mesa implements GLU 1.1. | ||||
|  | ||||
| Ideally, people should use the GLU 1.3 library included in SGI's | ||||
| OpenGL Sample Implementation (SI) available from  | ||||
| http://oss.sgi.com/projects/ogl-sample/ | ||||
| People are working to make easy-to-install Linux RPMs of the | ||||
| GLU library. | ||||
|  | ||||
|  | ||||
|  | ||||
| ---------------------------------------------------------------------- | ||||
| $Id: RELNOTES-3.2.1,v 1.1.2.3 2000/07/19 14:59:33 brianp Exp $ | ||||
| @@ -1,4 +1,4 @@ | ||||
| $Id: VERSIONS,v 1.13 1999/09/19 20:09:00 tanner Exp $ | ||||
| $Id: VERSIONS,v 1.13.2.47 2000/07/19 15:09:30 brianp Exp $ | ||||
|  | ||||
|  | ||||
| Mesa Version History | ||||
| @@ -659,3 +659,90 @@ Mesa Version History | ||||
| 	- New library numbering: libGL.so.1.2.310 | ||||
| 	- New subdirectories:  docs/ and bin/ | ||||
| 	- New Makefile-system (autoconf,automake,libtool) | ||||
|  | ||||
|  | ||||
| 3.1 final  December 14, 1999 | ||||
|     New: | ||||
| 	- added demos/gloss.c | ||||
| 	- added xdemos/glxdpyinfo.c | ||||
| 	- added GLX_ARB_get_proc_address extension | ||||
|     Bug fixes: | ||||
| 	- several vertex array bug fixes | ||||
| 	- overlapping glCopyPixels with pixel zooming now works | ||||
| 	- glXUseXFont() bitmaps were vertically shifted by one pixel | ||||
|  | ||||
|  | ||||
| 3.2 beta 1  March 23, 2000 | ||||
|     Bug fixes: | ||||
| 	- mixed drawing of lines and bitmaps sometimes had wrong colors | ||||
| 	- added missing glHintPGI() function | ||||
| 	- fixed a polygon culling bug | ||||
| 	- fixed bugs in gluPartialDisk() | ||||
| 	- Z values in selection mode were wrong | ||||
| 	- added missing tokens: | ||||
| 		GL_SMOOTH_POINT_SIZE_RANGE | ||||
| 		GL_SMOOTH_POINT_SIZE_GRANULARITY | ||||
| 		GL_SMOOTH_LINE_WIDTH_RANGE | ||||
| 		GL_SMOOTH_LINE_WIDTH_GRANULARITY | ||||
| 		GL_ALIASED_POINT_SIZE_RANGE | ||||
| 		GL_ALIASED_LINE_WIDTH_RANGE | ||||
| 	- fixed glCopyPixels when copying from back to front buffer | ||||
| 	- GL_EXT_compiled_vertex_array tokens had _SGI suffix instead of _EXT | ||||
| 	- glDrawRangeElements(GL_LINES, 0, 1, 2, type, indices) was broken | ||||
| 	- glDeleteTextures() didn't decrement reference count correctly | ||||
| 	- GL_SRCA_ALPHA_SATURATE blend mode didn't work correctly | ||||
| 	- Actual depth of transformation matrix stacks was off by one | ||||
| 	- 24bpp visuals didn't address pixels correctly | ||||
| 	- mipmap level of detail (lambda) calculation simplified, more accurate | ||||
| 	- 101691 - Polygon clipping and GL_LINE | ||||
| 	- 101928 - Polygon clipping and GL_LINE (same fix as above) | ||||
| 	- 101808 - Non-glVertexArrays tristrip bug | ||||
| 	- 101971 - find_last_3f on Dec OSF (worked around) | ||||
| 	- 102369 - segv on dec osf (possibly a duplicate of the above) | ||||
| 	- 102893 - orientations of modelview cause segfault | ||||
|     New: | ||||
| 	- updated SVGA Linux driver | ||||
| 	- added the MESA_FX_NO_SIGNALS env var, see docs/README.3DFX | ||||
| 	- build libGLw.a (Xt/OpenGL drawing area widget) library by default | ||||
| 	- changed -O2 to -O3 for a number of gcc configs | ||||
|     Changes: | ||||
|         - glXCopyContext's mask parameter is now unsigned long, per GLX spec | ||||
|  | ||||
|  | ||||
| 3.2 final  April 24, 2000 | ||||
|     Bug fixes: | ||||
| 	- fixed memcpy bugs in span.c | ||||
| 	- fixed missing glEnd problem in demos/tessdemo.c | ||||
| 	- fixed bug when clearing 24bpp Ximages | ||||
| 	- fixed clipping problem found in Unreal Tournament | ||||
| 	- fixed Loki's "ice bug" and "crazy triangles" seen in Heretic2 | ||||
| 	- fixed Loki's 3dfx RGB vs BGR bug | ||||
| 	- fixed Loki's 3dfx smooth/flat shading bug in SoF | ||||
|     Changes: | ||||
| 	- updated docs/README file | ||||
| 	- use bcopy() optimizations on FreeBSD | ||||
| 	- re-enabled the optimized persp_textured_triangle() function | ||||
|  | ||||
| 3.2.1  July 19, 2000 | ||||
|     Bug fixes: | ||||
| 	- gluBuild2DMipmaps() didn't accept GL_BGRA | ||||
| 	- Fixed compile/makefile problems on IRIX | ||||
| 	- fixed segfault in 3dfx driver when using GL selection/feedback | ||||
| 	- no longer cull very, very tiny triangles | ||||
| 	- blending w/ drawbuffer==GL_FRONT_BACK caused segfault (sw rendering) | ||||
| 	- fixed Motif detection code in widgets-mesa/configure.in | ||||
| 	- glColorMaterial and glMaterial updates to emissive and ambient | ||||
| 	  didn't always work right | ||||
| 	- Specular highlights weren't always in the right place | ||||
| 	- clipped GL_LINE mode polygons had interior lines appear | ||||
| 	- several OpenGL conformace test fixes | ||||
| 	- blend term GL_ONE_MINUS_CONSTANT_ALPHA was broken | ||||
| 	- GL_NICEST fog didn't always work with flat shading | ||||
| 	- glRect commands in display lists were sometimes miscolored | ||||
| 	- Line Z offset didn't always work | ||||
| 	- fixed texgen normal vector problem (gloss's teapot) | ||||
| 	- numerous GL conformance bugs fixed | ||||
|     Changes: | ||||
| 	- glColorMask(false, false, false, false) handled better/faster | ||||
| 	- reverted to old GLU polygon tessellator, GLU 1.1 | ||||
| 	- updated Win32 build files | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| /* $Id: amesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: amesa.h,v 1.1.1.1.2.1 2000/02/09 18:53:54 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
| @@ -25,25 +25,17 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: amesa.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 1.1  1999/03/16 01:24:13  brianp | ||||
|  * initial check-in | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* Allegro (DJGPP) driver by Bernhard Tschirren (bernie-t@geocities.com) */ | ||||
|  | ||||
|  | ||||
|  | ||||
| #ifndef AMESA_H | ||||
| #define AMESA_H | ||||
|  | ||||
|  | ||||
| #define AMESA_MAJOR_VERSION 3 | ||||
| #define AMESA_MINOR_VERSION 2 | ||||
|  | ||||
|  | ||||
| typedef struct amesa_visual  *AMesaVisual; | ||||
| typedef struct amesa_buffer  *AMesaBuffer; | ||||
| typedef struct amesa_context *AMesaContext; | ||||
|   | ||||
| @@ -1,40 +1,27 @@ | ||||
| /* $Id: fxmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: fxmesa.h,v 1.1.1.1.2.2 2000/02/09 18:53:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Copyright (C) 1995-1999  Brian Paul | ||||
|  * Version:  3.2 | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: fxmesa.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 3.2  1999/01/03 02:46:31  brianp | ||||
|  * now using GLAPI and GLAPIENTRY keywords (Ted Jump) | ||||
|  * | ||||
|  * Revision 3.1  1998/04/01 03:00:28  brianp | ||||
|  * updated for v0.24 of 3Dfx/Glide driver | ||||
|  * | ||||
|  * Revision 3.0  1998/02/20 05:04:45  brianp | ||||
|  * initial rev | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| @@ -58,7 +45,7 @@ extern "C" { | ||||
|  | ||||
|  | ||||
| #define FXMESA_MAJOR_VERSION 3 | ||||
| #define FXMESA_MINOR_VERSION 0 | ||||
| #define FXMESA_MINOR_VERSION 2 | ||||
|  | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| /* $Id: ggimesa.h,v 1.2 1999/08/23 22:34:08 jtaylor Exp $ */ | ||||
| /* $Id: ggimesa.h,v 1.2.2.1 2000/02/09 18:53:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-1998  Brian Paul | ||||
|  * Copyright (C) 1998  Uwe Maurer | ||||
|  * | ||||
| @@ -22,23 +22,14 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: ggimesa.h,v $ | ||||
|  * Revision 1.2  1999/08/23 22:34:08  jtaylor | ||||
|  * Misc small cleanups | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:40  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 1.2  1998/09/29 01:46:40  brianp | ||||
|  * applied Emmanuel Marty's patches for latest GGI | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef GGIMESA_H | ||||
| #define GGIMESA_H | ||||
|  | ||||
|  | ||||
| #define GGIMESA_MAJOR_VERSION 3 | ||||
| #define GGIMESA_MINOR_VERSION 2 | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										2485
									
								
								include/GL/gl.h
									
									
									
									
									
								
							
							
						
						
									
										2485
									
								
								include/GL/gl.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,8 +1,8 @@ | ||||
| /* $Id: gl_mangle.h,v 1.3 1999/11/04 00:43:09 miklos Exp $ */ | ||||
| /* $Id: gl_mangle.h,v 1.3.2.1 2000/01/04 08:08:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
| @@ -396,6 +396,8 @@ | ||||
| #define glTexSubImage3DEXT mglTexSubImage3DEXT | ||||
| #define glCopyTexSubImage3DEXT mglCopyTexSubImage3DEXT | ||||
| #define glColorTable mglColorTable | ||||
| #define glColorTableParameteriv mglColorTableParameteriv | ||||
| #define glColorTableParameterfv mglColorTableParameterfv | ||||
| #define glColorSubTable mglColorSubTable | ||||
| #define glGetColorTable mglGetColorTable | ||||
| #define glGetColorTableParameteriv mglGetColorTableParameteriv  | ||||
|   | ||||
							
								
								
									
										425
									
								
								include/GL/glu.h
									
									
									
									
									
								
							
							
						
						
									
										425
									
								
								include/GL/glu.h
									
									
									
									
									
								
							| @@ -1,10 +1,9 @@ | ||||
| /* $Id: glu.h,v 1.16 1999/11/11 03:21:43 kendallb Exp $ */ | ||||
| /* $Id: glu.h,v 1.14.2.2 2000/07/11 01:45:56 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.3 | ||||
|  * | ||||
|  * Copyright (C) 1995-1999  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -71,165 +70,172 @@ extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #define GLU_VERSION_1_1			1 | ||||
| #define GLU_VERSION_1_2			1 | ||||
| #define GLU_VERSION_1_1		1 | ||||
|  | ||||
|  | ||||
| #define GLU_TRUE			1 | ||||
| #define GLU_FALSE			0 | ||||
| #define GLU_TRUE   GL_TRUE | ||||
| #define GLU_FALSE  GL_FALSE | ||||
|  | ||||
|  | ||||
| /* Normal vectors */ | ||||
| #define GLU_SMOOTH			100000 | ||||
| #define GLU_FLAT			100001 | ||||
| #define GLU_NONE			100002 | ||||
| enum { | ||||
| 	/* Normal vectors */ | ||||
| 	GLU_SMOOTH	= 100000, | ||||
| 	GLU_FLAT	= 100001, | ||||
| 	GLU_NONE	= 100002, | ||||
|  | ||||
| /* Quadric draw styles */ | ||||
| #define GLU_POINT			100010 | ||||
| #define GLU_LINE			100011 | ||||
| #define GLU_FILL			100012 | ||||
| #define GLU_SILHOUETTE			100013 | ||||
| 	/* Quadric draw styles */ | ||||
| 	GLU_POINT	= 100010, | ||||
| 	GLU_LINE	= 100011, | ||||
| 	GLU_FILL	= 100012, | ||||
| 	GLU_SILHOUETTE	= 100013, | ||||
|  | ||||
| /* Quadric orientation */ | ||||
| #define GLU_OUTSIDE			100020 | ||||
| #define GLU_INSIDE			100021 | ||||
| 	/* Quadric orientation */ | ||||
| 	GLU_OUTSIDE	= 100020, | ||||
| 	GLU_INSIDE	= 100021, | ||||
|  | ||||
| /* Tessellator */ | ||||
| #define GLU_TESS_BEGIN			100100 | ||||
| #define GLU_TESS_VERTEX			100101 | ||||
| #define GLU_TESS_END			100102 | ||||
| #define GLU_TESS_ERROR			100103 | ||||
| #define GLU_TESS_EDGE_FLAG		100104 | ||||
| #define GLU_TESS_COMBINE		100105 | ||||
| 	/* Tessellator */ | ||||
| 	GLU_TESS_BEGIN		= 100100, | ||||
| 	GLU_TESS_VERTEX		= 100101, | ||||
| 	GLU_TESS_END		= 100102, | ||||
| 	GLU_TESS_ERROR		= 100103, | ||||
| 	GLU_TESS_EDGE_FLAG	= 100104, | ||||
| 	GLU_TESS_COMBINE	= 100105, | ||||
|  | ||||
| #define GLU_TESS_BEGIN_DATA		100106 | ||||
| #define GLU_TESS_VERTEX_DATA		100107 | ||||
| #define GLU_TESS_END_DATA		100108 | ||||
| #define GLU_TESS_ERROR_DATA		100109 | ||||
| #define GLU_TESS_EDGE_FLAG_DATA		100110 | ||||
| #define GLU_TESS_COMBINE_DATA		100111 | ||||
| 	GLU_TESS_BEGIN_DATA	= 100106, | ||||
| 	GLU_TESS_VERTEX_DATA	= 100107, | ||||
| 	GLU_TESS_END_DATA	= 100108, | ||||
| 	GLU_TESS_ERROR_DATA	= 100109, | ||||
| 	GLU_TESS_EDGE_FLAG_DATA	= 100110, | ||||
| 	GLU_TESS_COMBINE_DATA	= 100111, | ||||
|  | ||||
| /* Winding rules */ | ||||
| #define GLU_TESS_WINDING_ODD		100130 | ||||
| #define GLU_TESS_WINDING_NONZERO	100131 | ||||
| #define GLU_TESS_WINDING_POSITIVE	100132 | ||||
| #define GLU_TESS_WINDING_NEGATIVE	100133 | ||||
| #define GLU_TESS_WINDING_ABS_GEQ_TWO	100134 | ||||
| 	/* Winding rules */ | ||||
| 	GLU_TESS_WINDING_ODD		= 100130, | ||||
| 	GLU_TESS_WINDING_NONZERO	= 100131, | ||||
| 	GLU_TESS_WINDING_POSITIVE	= 100132, | ||||
| 	GLU_TESS_WINDING_NEGATIVE	= 100133, | ||||
| 	GLU_TESS_WINDING_ABS_GEQ_TWO	= 100134, | ||||
|  | ||||
| /* Tessellation properties */ | ||||
| #define GLU_TESS_WINDING_RULE		100140 | ||||
| #define GLU_TESS_BOUNDARY_ONLY		100141 | ||||
| #define GLU_TESS_TOLERANCE		100142 | ||||
| 	/* Tessellation properties */ | ||||
| 	GLU_TESS_WINDING_RULE	= 100140, | ||||
| 	GLU_TESS_BOUNDARY_ONLY	= 100141, | ||||
| 	GLU_TESS_TOLERANCE	= 100142, | ||||
|  | ||||
| /* Tessellation errors */ | ||||
| #define GLU_TESS_ERROR1			100151  /* Missing gluBeginPolygon */ | ||||
| #define GLU_TESS_ERROR2			100152  /* Missing gluBeginContour */ | ||||
| #define GLU_TESS_ERROR3			100153  /* Missing gluEndPolygon */ | ||||
| #define GLU_TESS_ERROR4			100154  /* Missing gluEndContour */ | ||||
| #define GLU_TESS_ERROR5			100155  /* */ | ||||
| #define GLU_TESS_ERROR6			100156  /* */ | ||||
| #define GLU_TESS_ERROR7			100157  /* */ | ||||
| #define GLU_TESS_ERROR8			100158  /* */ | ||||
| 	/* Tessellation errors */ | ||||
| 	GLU_TESS_ERROR1	= 100151,  /* Missing gluBeginPolygon */ | ||||
| 	GLU_TESS_ERROR2 = 100152,  /* Missing gluBeginContour */ | ||||
| 	GLU_TESS_ERROR3 = 100153,  /* Missing gluEndPolygon */ | ||||
| 	GLU_TESS_ERROR4 = 100154,  /* Missing gluEndContour */ | ||||
| 	GLU_TESS_ERROR5 = 100155,  /* */ | ||||
| 	GLU_TESS_ERROR6 = 100156,  /* */ | ||||
| 	GLU_TESS_ERROR7 = 100157,  /* */ | ||||
| 	GLU_TESS_ERROR8 = 100158,  /* */ | ||||
| 	GLU_TESS_ERROR9 = 100159,  /* not coplanar contours */ | ||||
|  | ||||
| /* NURBS */ | ||||
| #define GLU_AUTO_LOAD_MATRIX		100200 | ||||
| #define GLU_CULLING			100201 | ||||
| #define GLU_PARAMETRIC_TOLERANCE	100202 | ||||
| #define GLU_SAMPLING_TOLERANCE		100203 | ||||
| #define GLU_DISPLAY_MODE		100204 | ||||
| #define GLU_SAMPLING_METHOD		100205 | ||||
| #define GLU_U_STEP			100206 | ||||
| #define GLU_V_STEP			100207 | ||||
| 	/* NURBS */ | ||||
| 	GLU_AUTO_LOAD_MATRIX	= 100200, | ||||
| 	GLU_CULLING		= 100201, | ||||
| 	GLU_PARAMETRIC_TOLERANCE= 100202, | ||||
| 	GLU_SAMPLING_TOLERANCE	= 100203, | ||||
| 	GLU_DISPLAY_MODE	= 100204, | ||||
| 	GLU_SAMPLING_METHOD	= 100205, | ||||
| 	GLU_U_STEP		= 100206, | ||||
| 	GLU_V_STEP		= 100207, | ||||
|  | ||||
| #define GLU_PATH_LENGTH			100215 | ||||
| #define GLU_PARAMETRIC_ERROR		100216 | ||||
| #define GLU_DOMAIN_DISTANCE		100217 | ||||
| 	GLU_PATH_LENGTH		= 100215, | ||||
| 	GLU_PARAMETRIC_ERROR	= 100216, | ||||
| 	GLU_DOMAIN_DISTANCE	= 100217, | ||||
|  | ||||
| #define GLU_MAP1_TRIM_2			100210 | ||||
| #define GLU_MAP1_TRIM_3			100211 | ||||
| 	GLU_MAP1_TRIM_2		= 100210, | ||||
| 	GLU_MAP1_TRIM_3		= 100211, | ||||
|  | ||||
| #define GLU_OUTLINE_POLYGON		100240 | ||||
| #define GLU_OUTLINE_PATCH		100241 | ||||
| 	GLU_OUTLINE_POLYGON	= 100240, | ||||
| 	GLU_OUTLINE_PATCH	= 100241, | ||||
|  | ||||
| #define GLU_NURBS_ERROR1	100251   /* spline order un-supported */ | ||||
| #define GLU_NURBS_ERROR2	100252   /* too few knots */ | ||||
| #define GLU_NURBS_ERROR3	100253   /* valid knot range is empty */ | ||||
| #define GLU_NURBS_ERROR4	100254   /* decreasing knot sequence */ | ||||
| #define GLU_NURBS_ERROR5	100255   /* knot multiplicity > spline order */ | ||||
| #define GLU_NURBS_ERROR6	100256   /* endcurve() must follow bgncurve() */ | ||||
| #define GLU_NURBS_ERROR7	100257   /* bgncurve() must precede endcurve() */ | ||||
| #define GLU_NURBS_ERROR8	100258   /* ctrlarray or knot vector is NULL */ | ||||
| #define GLU_NURBS_ERROR9 	100259   /* can't draw pwlcurves */ | ||||
| #define GLU_NURBS_ERROR10	100260   /* missing gluNurbsCurve() */ | ||||
| #define GLU_NURBS_ERROR11	100261   /* missing gluNurbsSurface() */ | ||||
| #define GLU_NURBS_ERROR12	100262   /* endtrim() must precede endsurface() */ | ||||
| #define GLU_NURBS_ERROR13	100263   /* bgnsurface() must precede endsurface() */ | ||||
| #define GLU_NURBS_ERROR14	100264   /* curve of improper type passed as trim curve */ | ||||
| #define GLU_NURBS_ERROR15	100265   /* bgnsurface() must precede bgntrim() */ | ||||
| #define GLU_NURBS_ERROR16	100266   /* endtrim() must follow bgntrim() */ | ||||
| #define GLU_NURBS_ERROR17	100267   /* bgntrim() must precede endtrim()*/ | ||||
| #define GLU_NURBS_ERROR18	100268   /* invalid or missing trim curve*/ | ||||
| #define GLU_NURBS_ERROR19	100269   /* bgntrim() must precede pwlcurve() */ | ||||
| #define GLU_NURBS_ERROR20	100270   /* pwlcurve referenced twice*/ | ||||
| #define GLU_NURBS_ERROR21	100271   /* pwlcurve and nurbscurve mixed */ | ||||
| #define GLU_NURBS_ERROR22	100272   /* improper usage of trim data type */ | ||||
| #define GLU_NURBS_ERROR23	100273   /* nurbscurve referenced twice */ | ||||
| #define GLU_NURBS_ERROR24	100274   /* nurbscurve and pwlcurve mixed */ | ||||
| #define GLU_NURBS_ERROR25	100275   /* nurbssurface referenced twice */ | ||||
| #define GLU_NURBS_ERROR26	100276   /* invalid property */ | ||||
| #define GLU_NURBS_ERROR27	100277   /* endsurface() must follow bgnsurface() */ | ||||
| #define GLU_NURBS_ERROR28	100278   /* intersecting or misoriented trim curves */ | ||||
| #define GLU_NURBS_ERROR29	100279   /* intersecting trim curves */ | ||||
| #define GLU_NURBS_ERROR30	100280   /* UNUSED */ | ||||
| #define GLU_NURBS_ERROR31	100281   /* unconnected trim curves */ | ||||
| #define GLU_NURBS_ERROR32	100282   /* unknown knot error */ | ||||
| #define GLU_NURBS_ERROR33	100283   /* negative vertex count encountered */ | ||||
| #define GLU_NURBS_ERROR34	100284   /* negative byte-stride */ | ||||
| #define GLU_NURBS_ERROR35	100285   /* unknown type descriptor */ | ||||
| #define GLU_NURBS_ERROR36	100286   /* null control point reference */ | ||||
| #define GLU_NURBS_ERROR37	100287   /* duplicate point on pwlcurve */ | ||||
| 	GLU_NURBS_ERROR1  = 100251,   /* spline order un-supported */ | ||||
| 	GLU_NURBS_ERROR2  = 100252,   /* too few knots */ | ||||
| 	GLU_NURBS_ERROR3  = 100253,   /* valid knot range is empty */ | ||||
| 	GLU_NURBS_ERROR4  = 100254,   /* decreasing knot sequence */ | ||||
| 	GLU_NURBS_ERROR5  = 100255,   /* knot multiplicity > spline order */ | ||||
| 	GLU_NURBS_ERROR6  = 100256,   /* endcurve() must follow bgncurve() */ | ||||
| 	GLU_NURBS_ERROR7  = 100257,   /* bgncurve() must precede endcurve() */ | ||||
| 	GLU_NURBS_ERROR8  = 100258,   /* ctrlarray or knot vector is NULL */ | ||||
| 	GLU_NURBS_ERROR9  = 100259,   /* can't draw pwlcurves */ | ||||
| 	GLU_NURBS_ERROR10 = 100260,   /* missing gluNurbsCurve() */ | ||||
| 	GLU_NURBS_ERROR11 = 100261,   /* missing gluNurbsSurface() */ | ||||
| 	GLU_NURBS_ERROR12 = 100262,   /* endtrim() must precede endsurface() */ | ||||
| 	GLU_NURBS_ERROR13 = 100263,   /* bgnsurface() must precede endsurface() */ | ||||
| 	GLU_NURBS_ERROR14 = 100264,   /* curve of improper type passed as trim curve */ | ||||
| 	GLU_NURBS_ERROR15 = 100265,   /* bgnsurface() must precede bgntrim() */ | ||||
| 	GLU_NURBS_ERROR16 = 100266,   /* endtrim() must follow bgntrim() */ | ||||
| 	GLU_NURBS_ERROR17 = 100267,   /* bgntrim() must precede endtrim()*/ | ||||
| 	GLU_NURBS_ERROR18 = 100268,   /* invalid or missing trim curve*/ | ||||
| 	GLU_NURBS_ERROR19 = 100269,   /* bgntrim() must precede pwlcurve() */ | ||||
| 	GLU_NURBS_ERROR20 = 100270,   /* pwlcurve referenced twice*/ | ||||
| 	GLU_NURBS_ERROR21 = 100271,   /* pwlcurve and nurbscurve mixed */ | ||||
| 	GLU_NURBS_ERROR22 = 100272,   /* improper usage of trim data type */ | ||||
| 	GLU_NURBS_ERROR23 = 100273,   /* nurbscurve referenced twice */ | ||||
| 	GLU_NURBS_ERROR24 = 100274,   /* nurbscurve and pwlcurve mixed */ | ||||
| 	GLU_NURBS_ERROR25 = 100275,   /* nurbssurface referenced twice */ | ||||
| 	GLU_NURBS_ERROR26 = 100276,   /* invalid property */ | ||||
| 	GLU_NURBS_ERROR27 = 100277,   /* endsurface() must follow bgnsurface() */ | ||||
| 	GLU_NURBS_ERROR28 = 100278,   /* intersecting or misoriented trim curves */ | ||||
| 	GLU_NURBS_ERROR29 = 100279,   /* intersecting trim curves */ | ||||
| 	GLU_NURBS_ERROR30 = 100280,   /* UNUSED */ | ||||
| 	GLU_NURBS_ERROR31 = 100281,   /* unconnected trim curves */ | ||||
| 	GLU_NURBS_ERROR32 = 100282,   /* unknown knot error */ | ||||
| 	GLU_NURBS_ERROR33 = 100283,   /* negative vertex count encountered */ | ||||
| 	GLU_NURBS_ERROR34 = 100284,   /* negative byte-stride */ | ||||
| 	GLU_NURBS_ERROR35 = 100285,   /* unknown type descriptor */ | ||||
| 	GLU_NURBS_ERROR36 = 100286,   /* null control point reference */ | ||||
| 	GLU_NURBS_ERROR37 = 100287,   /* duplicate point on pwlcurve */ | ||||
|  | ||||
| /* Errors */ | ||||
| #define GLU_INVALID_ENUM		100900 | ||||
| #define GLU_INVALID_VALUE		100901 | ||||
| #define GLU_OUT_OF_MEMORY		100902 | ||||
| #define GLU_INCOMPATIBLE_GL_VERSION	100903 | ||||
| 	/* Errors */ | ||||
| 	GLU_INVALID_ENUM		= 100900, | ||||
| 	GLU_INVALID_VALUE		= 100901, | ||||
| 	GLU_OUT_OF_MEMORY		= 100902, | ||||
| 	GLU_INCOMPATIBLE_GL_VERSION	= 100903, | ||||
|  | ||||
| /* New in GLU 1.1 */ | ||||
| #define GLU_VERSION			100800 | ||||
| #define GLU_EXTENSIONS			100801 | ||||
| 	/* New in GLU 1.1 */ | ||||
| 	GLU_VERSION	= 100800, | ||||
| 	GLU_EXTENSIONS	= 100801, | ||||
|  | ||||
| /*** GLU 1.0 tessellation - obsolete! ***/ | ||||
| 	/*** GLU 1.0 tessellation - obsolete! ***/ | ||||
|  | ||||
| /* Contour types */ | ||||
| #define GLU_CW				100120 | ||||
| #define GLU_CCW				100121 | ||||
| #define GLU_INTERIOR			100122 | ||||
| #define GLU_EXTERIOR			100123 | ||||
| #define GLU_UNKNOWN			100124 | ||||
| 	/* Contour types */ | ||||
| 	GLU_CW		= 100120, | ||||
| 	GLU_CCW		= 100121, | ||||
| 	GLU_INTERIOR	= 100122, | ||||
| 	GLU_EXTERIOR	= 100123, | ||||
| 	GLU_UNKNOWN	= 100124, | ||||
|  | ||||
| /* Tessellator */ | ||||
| #define GLU_BEGIN			GLU_TESS_BEGIN | ||||
| #define GLU_VERTEX			GLU_TESS_VERTEX | ||||
| #define GLU_END				GLU_TESS_END | ||||
| #define GLU_ERROR			GLU_TESS_ERROR | ||||
| #define GLU_EDGE_FLAG			GLU_TESS_EDGE_FLAG | ||||
| 	/* Tessellator */ | ||||
| 	GLU_BEGIN	= GLU_TESS_BEGIN, | ||||
| 	GLU_VERTEX	= GLU_TESS_VERTEX, | ||||
| 	GLU_END		= GLU_TESS_END, | ||||
| 	GLU_ERROR	= GLU_TESS_ERROR, | ||||
| 	GLU_EDGE_FLAG	= GLU_TESS_EDGE_FLAG | ||||
| }; | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * These are the GLU 1.1 typedefs.  GLU 1.3 has different ones! | ||||
|  */ | ||||
| #if defined(__BEOS__) | ||||
|     /* The BeOS does something funky and makes these typedefs in one | ||||
|      * of its system headers. | ||||
|      */ | ||||
| #else | ||||
|  | ||||
| #if defined GLU_VERSION_1_2 | ||||
|     typedef struct GLUquadric GLUquadricObj; | ||||
|     typedef struct GLUnurbs GLUnurbsObj; | ||||
|  | ||||
|     /* FIXME: We need to implement the other 1.3 typedefs - GH */ | ||||
|     typedef struct GLUtesselator GLUtesselator; | ||||
|     typedef GLUtesselator GLUtriangulatorObj; | ||||
| #else | ||||
|     /* GLU 1.1 and older */ | ||||
|     typedef struct GLUquadric GLUquadricObj; | ||||
|     typedef struct GLUtriangulatorObj GLUtriangulatorObj; | ||||
|     typedef struct GLUnurbs GLUnurbsObj; | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
| @@ -246,37 +252,37 @@ extern "C" { | ||||
|  */ | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, | ||||
|                                   GLdouble centerx, GLdouble centery, | ||||
|                                   GLdouble centerz, | ||||
|                                   GLdouble upx, GLdouble upy, GLdouble upz ); | ||||
|                                 GLdouble centerx, GLdouble centery, | ||||
|                                 GLdouble centerz, | ||||
|                                 GLdouble upx, GLdouble upy, GLdouble upz ); | ||||
|  | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluOrtho2D( GLdouble left, GLdouble right, | ||||
|                                    GLdouble bottom, GLdouble top ); | ||||
|                                  GLdouble bottom, GLdouble top ); | ||||
|  | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluPerspective( GLdouble fovy, GLdouble aspect, | ||||
|                                        GLdouble zNear, GLdouble zFar ); | ||||
|                                      GLdouble zNear, GLdouble zFar ); | ||||
|  | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluPickMatrix( GLdouble x, GLdouble y, | ||||
|                                       GLdouble width, GLdouble height, | ||||
|                                       const GLint viewport[4] ); | ||||
|                                     GLdouble width, GLdouble height, | ||||
|                                     const GLint viewport[4] ); | ||||
|  | ||||
| GLUAPI GLint GLAPIENTRY gluProject( GLdouble objx, GLdouble objy, GLdouble objz, | ||||
|                                   const GLdouble modelMatrix[16], | ||||
|                                   const GLdouble projMatrix[16], | ||||
|                                   const GLint viewport[4], | ||||
|                                   GLdouble *winx, GLdouble *winy, | ||||
|                                   GLdouble *winz ); | ||||
|  | ||||
| GLUAPI GLint GLAPIENTRY gluUnProject( GLdouble winx, GLdouble winy, | ||||
|                                     GLdouble winz, | ||||
|                                     const GLdouble modelMatrix[16], | ||||
|                                     const GLdouble projMatrix[16], | ||||
|                                     const GLint viewport[4], | ||||
|                                     GLdouble *winx, GLdouble *winy, | ||||
|                                     GLdouble *winz ); | ||||
|  | ||||
| GLUAPI GLint GLAPIENTRY gluUnProject( GLdouble winx, GLdouble winy, | ||||
|                                       GLdouble winz, | ||||
|                                       const GLdouble modelMatrix[16], | ||||
|                                       const GLdouble projMatrix[16], | ||||
|                                       const GLint viewport[4], | ||||
|                                       GLdouble *objx, GLdouble *objy, | ||||
|                                       GLdouble *objz ); | ||||
|                                     GLdouble *objx, GLdouble *objy, | ||||
|                                     GLdouble *objz ); | ||||
|  | ||||
| GLUAPI const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode ); | ||||
|  | ||||
| @@ -289,19 +295,19 @@ GLUAPI const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode ); | ||||
|  */ | ||||
|  | ||||
| GLUAPI GLint GLAPIENTRY gluScaleImage( GLenum format, | ||||
|                                        GLint widthin, GLint heightin, | ||||
|                                        GLenum typein, const void *datain, | ||||
|                                        GLint widthout, GLint heightout, | ||||
|                                        GLenum typeout, void *dataout ); | ||||
|                                      GLsizei widthin, GLsizei heightin, | ||||
|                                      GLenum typein, const void *datain, | ||||
|                                      GLsizei widthout, GLsizei heightout, | ||||
|                                      GLenum typeout, void *dataout ); | ||||
|  | ||||
| GLUAPI GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components, | ||||
|                                            GLint width, GLenum format, | ||||
|                                            GLenum type, const void *data ); | ||||
|                                          GLsizei width, GLenum format, | ||||
|                                          GLenum type, const void *data ); | ||||
|  | ||||
| GLUAPI GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components, | ||||
|                                            GLint width, GLint height, | ||||
|                                            GLenum format, | ||||
|                                            GLenum type, const void *data ); | ||||
|                                          GLsizei width, GLsizei height, | ||||
|                                          GLenum format, | ||||
|                                          GLenum type, const void *data ); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -316,39 +322,37 @@ GLUAPI GLUquadricObj* GLAPIENTRY gluNewQuadric( void ); | ||||
| GLUAPI void GLAPIENTRY gluDeleteQuadric( GLUquadricObj *state ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluQuadricDrawStyle( GLUquadricObj *quadObject, | ||||
|                                             GLenum drawStyle ); | ||||
|                                           GLenum drawStyle ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluQuadricOrientation( GLUquadricObj *quadObject, | ||||
|                                               GLenum orientation ); | ||||
|                                             GLenum orientation ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluQuadricNormals( GLUquadricObj *quadObject, | ||||
|                                           GLenum normals ); | ||||
|                                         GLenum normals ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluQuadricTexture( GLUquadricObj *quadObject, | ||||
|                                           GLboolean textureCoords ); | ||||
|                                         GLboolean textureCoords ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluQuadricCallback( GLUquadricObj *qobj, | ||||
|                                            GLenum which, | ||||
|                                            void (GLCALLBACK *fn)() ); | ||||
|                                          GLenum which, void (GLCALLBACK *fn)() ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluCylinder( GLUquadricObj *qobj, | ||||
|                                     GLdouble baseRadius, | ||||
|                                     GLdouble topRadius, | ||||
|                                     GLdouble height, | ||||
|                                     GLint slices, GLint stacks ); | ||||
|                                   GLdouble baseRadius, | ||||
|                                   GLdouble topRadius, | ||||
|                                   GLdouble height, | ||||
|                                   GLint slices, GLint stacks ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluSphere( GLUquadricObj *qobj, | ||||
|                                   GLdouble radius, GLint slices, | ||||
|                                   GLint stacks ); | ||||
|                                 GLdouble radius, GLint slices, GLint stacks ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluDisk( GLUquadricObj *qobj, | ||||
|                                 GLdouble innerRadius, GLdouble outerRadius, | ||||
|                                 GLint slices, GLint loops ); | ||||
|                               GLdouble innerRadius, GLdouble outerRadius, | ||||
|                               GLint slices, GLint loops ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluPartialDisk( GLUquadricObj *qobj, GLdouble innerRadius, | ||||
|                                        GLdouble outerRadius, GLint slices, | ||||
|                                        GLint loops, GLdouble startAngle, | ||||
|                                        GLdouble sweepAngle ); | ||||
|                                      GLdouble outerRadius, GLint slices, | ||||
|                                      GLint loops, GLdouble startAngle, | ||||
|                                      GLdouble sweepAngle ); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -363,47 +367,46 @@ GLUAPI GLUnurbsObj* GLAPIENTRY gluNewNurbsRenderer( void ); | ||||
| GLUAPI void GLAPIENTRY gluDeleteNurbsRenderer( GLUnurbsObj *nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluLoadSamplingMatrices( GLUnurbsObj *nobj, | ||||
|                                                 const GLfloat modelMatrix[16], | ||||
|                                                 const GLfloat projMatrix[16], | ||||
|                                                 const GLint viewport[4] ); | ||||
|                                               const GLfloat modelMatrix[16], | ||||
|                                               const GLfloat projMatrix[16], | ||||
|                                               const GLint viewport[4] ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluNurbsProperty( GLUnurbsObj *nobj, GLenum property, | ||||
|                                          GLfloat value ); | ||||
|                                        GLfloat value ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluGetNurbsProperty( GLUnurbsObj *nobj, GLenum property, | ||||
|                                             GLfloat *value ); | ||||
|                                           GLfloat *value ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluBeginCurve( GLUnurbsObj *nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluEndCurve( GLUnurbsObj * nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluNurbsCurve( GLUnurbsObj *nobj, GLint nknots, | ||||
|                                       GLfloat *knot, GLint stride, | ||||
|                                       GLfloat *ctlarray, GLint order, | ||||
|                                       GLenum type ); | ||||
|                                     GLfloat *knot, GLint stride, | ||||
|                                     GLfloat *ctlarray, GLint order, | ||||
|                                     GLenum type ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluBeginSurface( GLUnurbsObj *nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluEndSurface( GLUnurbsObj * nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluNurbsSurface( GLUnurbsObj *nobj, | ||||
|                                         GLint sknot_count, GLfloat *sknot, | ||||
|                                         GLint tknot_count, GLfloat *tknot, | ||||
|                                         GLint s_stride, GLint t_stride, | ||||
|                                         GLfloat *ctlarray, | ||||
|                                         GLint sorder, GLint torder, | ||||
|                                         GLenum type ); | ||||
|                                       GLint sknot_count, GLfloat *sknot, | ||||
|                                       GLint tknot_count, GLfloat *tknot, | ||||
|                                       GLint s_stride, GLint t_stride, | ||||
|                                       GLfloat *ctlarray, | ||||
|                                       GLint sorder, GLint torder, | ||||
|                                       GLenum type ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluBeginTrim( GLUnurbsObj *nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluEndTrim( GLUnurbsObj *nobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluPwlCurve( GLUnurbsObj *nobj, GLint count, | ||||
|                                     GLfloat *array, GLint stride, | ||||
|                                     GLenum type ); | ||||
|                                   GLfloat *array, GLint stride, GLenum type ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluNurbsCallback( GLUnurbsObj *nobj, GLenum which, | ||||
|                                          void (GLCALLBACK *fn)() ); | ||||
|                                        void (GLCALLBACK *fn)() ); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -413,6 +416,8 @@ GLUAPI void GLAPIENTRY gluNurbsCallback( GLUnurbsObj *nobj, GLenum which, | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifdef GLU_VERSION_1_2 | ||||
|  | ||||
| GLUAPI GLUtesselator* GLAPIENTRY gluNewTess( void ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluDeleteTess( GLUtesselator *tobj ); | ||||
| @@ -441,17 +446,26 @@ GLUAPI void GLAPIENTRY gluTessCallback( GLUtesselator *tobj, GLenum which, | ||||
| GLUAPI void GLAPIENTRY gluGetTessProperty( GLUtesselator *tobj, GLenum which, | ||||
| 					   GLdouble *value ); | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * Obsolete 1.0 tessellation functions | ||||
|  * | ||||
|  */ | ||||
| #else | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluBeginPolygon( GLUtesselator *tobj ); | ||||
| GLUAPI GLUtriangulatorObj* GLAPIENTRY gluNewTess( void ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluNextContour( GLUtesselator *tobj, GLenum type ); | ||||
| GLUAPI void GLAPIENTRY gluTessCallback( GLUtriangulatorObj *tobj, GLenum which, | ||||
|                                         void (GLCALLBACK *fn)() ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluDeleteTess( GLUtriangulatorObj *tobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluBeginPolygon( GLUtriangulatorObj *tobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluEndPolygon( GLUtriangulatorObj *tobj ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluNextContour( GLUtriangulatorObj *tobj, GLenum type ); | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluTessVertex( GLUtriangulatorObj *tobj, GLdouble v[3], | ||||
|                                       void *data ); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| GLUAPI void GLAPIENTRY gluEndPolygon( GLUtesselator *tobj ); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -465,6 +479,21 @@ GLUAPI const GLubyte* GLAPIENTRY gluGetString( GLenum name ); | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * GLU 1.3 functions | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifdef GLU_VERSION_1_3 | ||||
|  | ||||
| GLUAPI GLboolean GLAPIENTRY | ||||
| gluCheckExtension( const char *extName, const GLubyte *extString ); | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
| #if defined(__BEOS__) || defined(__QUICKDRAW__) | ||||
| #pragma export off | ||||
| #endif | ||||
|   | ||||
| @@ -108,7 +108,7 @@ extern _CRTIMP void __cdecl exit(int); | ||||
|    and redifinition of Windows system defs, also removes requirement of | ||||
|    pretty much any standard windows header from this file */ | ||||
|  | ||||
| #if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) | ||||
| #if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__) | ||||
| #	define GLUTAPIENTRY __stdcall | ||||
| #else | ||||
| #	define GLUTAPIENTRY | ||||
| @@ -152,7 +152,7 @@ typedef unsigned long COLORREF; | ||||
| #		define wglUseFontOutlines  wglUseFontOutlinesA | ||||
| #	endif /* !UNICODE */ | ||||
| typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR; | ||||
| typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT | ||||
| typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT; | ||||
| #  pragma warning( push ) | ||||
| #  pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */ | ||||
| #  define WGLAPI __declspec(dllimport) | ||||
| @@ -183,7 +183,7 @@ WGLAPI int   GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, u | ||||
| WGLAPI int   GLAPIENTRY wglUseFontOutlinesW(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT); | ||||
| WGLAPI int   GLAPIENTRY SwapBuffers(HDC); | ||||
| WGLAPI int   GLAPIENTRY ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR *); | ||||
| WGLAPI int   GLAPIENTRY DescribePixelFormat(HDC,int,unsigned long,LPPIXELFORMATDESCRIPTOR); | ||||
| WGLAPI int   GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR); | ||||
| WGLAPI int   GLAPIENTRY GetPixelFormat(HDC); | ||||
| WGLAPI int   GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *); | ||||
| #  undef WGLAPI | ||||
| @@ -199,7 +199,7 @@ WGLAPI int   GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *); | ||||
| #  define GLUTCALLBACK | ||||
| #  define GLUTAPI extern | ||||
| /* Prototype exit for the non-Win32 case (see above). */ | ||||
| extern void exit(int); | ||||
| /*extern void exit(int);  this screws up gcc -ansi -pedantic! */ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| @@ -739,7 +739,6 @@ GLUTAPI int GLUTAPIENTRY glutGameModeGet(GLenum mode); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if 0 | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| /* $Id: glx.h,v 1.6 1999/11/11 01:27:17 brianp Exp $ */ | ||||
| /* $Id: glx.h,v 1.5.2.3 2000/02/23 23:05:07 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.3 | ||||
|  * Version:  3.2 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
| @@ -50,41 +50,38 @@ extern "C" { | ||||
|  | ||||
| #define GLX_VERSION_1_1		1 | ||||
|  | ||||
| #define GLX_EXTENSION_NAME   "GLX" | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Tokens for glXChooseVisual and glXGetConfig: | ||||
|  */ | ||||
| #define GLX_USE_GL		1 | ||||
| #define GLX_BUFFER_SIZE		2 | ||||
| #define GLX_LEVEL		3 | ||||
| #define GLX_RGBA		4 | ||||
| #define GLX_DOUBLEBUFFER	5 | ||||
| #define GLX_STEREO		6 | ||||
| #define GLX_AUX_BUFFERS		7 | ||||
| #define GLX_RED_SIZE		8 | ||||
| #define GLX_GREEN_SIZE		9 | ||||
| #define GLX_BLUE_SIZE		10 | ||||
| #define GLX_ALPHA_SIZE		11 | ||||
| #define GLX_DEPTH_SIZE		12 | ||||
| #define GLX_STENCIL_SIZE	13 | ||||
| #define GLX_ACCUM_RED_SIZE	14 | ||||
| #define GLX_ACCUM_GREEN_SIZE	15 | ||||
| #define GLX_ACCUM_BLUE_SIZE	16 | ||||
| #define GLX_ACCUM_ALPHA_SIZE	17 | ||||
|  | ||||
|  | ||||
| /* GLX_EXT_visual_info extension */ | ||||
| #define GLX_X_VISUAL_TYPE_EXT		0x22 | ||||
| #define GLX_TRANSPARENT_TYPE_EXT	0x23 | ||||
| #define GLX_TRANSPARENT_INDEX_VALUE_EXT	0x24 | ||||
| #define GLX_TRANSPARENT_RED_VALUE_EXT	0x25 | ||||
| #define GLX_TRANSPARENT_GREEN_VALUE_EXT	0x26 | ||||
| #define GLX_TRANSPARENT_BLUE_VALUE_EXT	0x27 | ||||
| #define GLX_TRANSPARENT_ALPHA_VALUE_EXT	0x28 | ||||
| enum _GLX_CONFIGS { | ||||
| 	GLX_USE_GL		= 1, | ||||
| 	GLX_BUFFER_SIZE		= 2, | ||||
| 	GLX_LEVEL		= 3, | ||||
| 	GLX_RGBA		= 4, | ||||
| 	GLX_DOUBLEBUFFER	= 5,  | ||||
| 	GLX_STEREO		= 6, | ||||
| 	GLX_AUX_BUFFERS		= 7, | ||||
| 	GLX_RED_SIZE		= 8, | ||||
| 	GLX_GREEN_SIZE		= 9, | ||||
| 	GLX_BLUE_SIZE		= 10, | ||||
| 	GLX_ALPHA_SIZE		= 11, | ||||
| 	GLX_DEPTH_SIZE		= 12, | ||||
| 	GLX_STENCIL_SIZE	= 13, | ||||
| 	GLX_ACCUM_RED_SIZE	= 14, | ||||
| 	GLX_ACCUM_GREEN_SIZE	= 15, | ||||
| 	GLX_ACCUM_BLUE_SIZE	= 16, | ||||
| 	GLX_ACCUM_ALPHA_SIZE	= 17, | ||||
|  | ||||
| 	/* GLX_EXT_visual_info extension */ | ||||
| 	GLX_X_VISUAL_TYPE_EXT		= 0x22, | ||||
| 	GLX_TRANSPARENT_TYPE_EXT	= 0x23, | ||||
| 	GLX_TRANSPARENT_INDEX_VALUE_EXT	= 0x24, | ||||
| 	GLX_TRANSPARENT_RED_VALUE_EXT	= 0x25, | ||||
| 	GLX_TRANSPARENT_GREEN_VALUE_EXT	= 0x26, | ||||
| 	GLX_TRANSPARENT_BLUE_VALUE_EXT	= 0x27, | ||||
| 	GLX_TRANSPARENT_ALPHA_VALUE_EXT	= 0x28 | ||||
| }; | ||||
|  | ||||
|  | ||||
| /* | ||||
| @@ -125,12 +122,12 @@ extern "C" { | ||||
|  * Compile-time extension tests | ||||
|  */ | ||||
| #define GLX_EXT_visual_info		1 | ||||
| #define GLX_EXT_get_proc_address	1 | ||||
| #define GLX_MESA_pixmap_colormap	1 | ||||
| #define GLX_MESA_release_buffers	1 | ||||
| #define GLX_MESA_copy_sub_buffer	1 | ||||
| #define GLX_MESA_set_3dfx_mode		1 | ||||
| #define GLX_SGI_video_sync		1 | ||||
| #define GLX_ARB_get_proc_address	1 | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -159,7 +156,7 @@ extern Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable, | ||||
| 			    GLXContext ctx); | ||||
|  | ||||
| extern void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, | ||||
| 			    GLuint mask ); | ||||
| 			    unsigned long mask ); | ||||
|  | ||||
| extern void glXSwapBuffers( Display *dpy, GLXDrawable drawable ); | ||||
|  | ||||
| @@ -222,6 +219,10 @@ extern int glXWaitVideoSyncSGI(int divisor, int remainder, | ||||
|                                unsigned int *count); | ||||
|  | ||||
|  | ||||
| /* GLX_ARB_get_proc_address */ | ||||
| extern void (*glXGetProcAddressARB(const GLubyte *procName))(); | ||||
|  | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|   | ||||
| @@ -1,11 +1,46 @@ | ||||
| /* $Id: mesa_wgl.h,v 1.2.2.2 1999/11/22 14:05:15 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* prototypes for the Mesa WGL functions */ | ||||
| /* relocated here so that I could make GLUT get them properly */ | ||||
|  | ||||
| #ifndef GL_H | ||||
| #   include <gl/gl.h> | ||||
| #ifndef _mesa_wgl_h_ | ||||
| #define _mesa_wgl_h_ | ||||
|  | ||||
|  | ||||
| #include <gl/gl.h> | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #ifdef _MSC_VER | ||||
| #  pragma warning( disable : 4615 ) /* pragma warning : unknown user warning type*/ | ||||
| #  pragma warning( push ) | ||||
| #  pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */ | ||||
| #endif | ||||
| @@ -37,10 +72,17 @@ WGLAPI int   GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, u | ||||
| WGLAPI int   GLAPIENTRY wglUseFontOutlinesW(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT); | ||||
| WGLAPI int   GLAPIENTRY SwapBuffers(HDC); | ||||
| WGLAPI int   GLAPIENTRY ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR *); | ||||
| WGLAPI int   GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,PIXELFORMATDESCRIPTOR *); | ||||
| WGLAPI int   GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR); | ||||
| WGLAPI int   GLAPIENTRY GetPixelFormat(HDC); | ||||
| WGLAPI int   GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *); | ||||
|  | ||||
| #ifdef _MSC_VER | ||||
| #  pragma warning( pop ) | ||||
| #endif | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #endif /* _mesa_wgl_h_ */ | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| /* $Id: osmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: osmesa.h,v 1.1.1.1.2.2 2000/02/09 18:53:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
| @@ -25,26 +25,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: osmesa.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 1.4  1999/02/14 03:39:09  brianp | ||||
|  * new copyright | ||||
|  * | ||||
|  * Revision 1.3  1999/01/03 02:52:30  brianp | ||||
|  * now using GLAPI and GLAPIENTRY keywords (Ted Jump) | ||||
|  * | ||||
|  * Revision 1.2  1998/07/26 01:33:51  brianp | ||||
|  * added WINGDIAPI and APIENTRY keywords per Ted Jump | ||||
|  * | ||||
|  * Revision 1.1  1998/02/13 03:17:50  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Mesa Off-Screen rendering interface. | ||||
|  * | ||||
| @@ -86,7 +66,7 @@ extern "C" { | ||||
|  | ||||
|  | ||||
| #define OSMESA_MAJOR_VERSION 3 | ||||
| #define OSMESA_MINOR_VERSION 0 | ||||
| #define OSMESA_MINOR_VERSION 2 | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: svgamesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: svgamesa.h,v 1.1.1.1.2.2 2000/01/22 19:58:02 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.0 | ||||
|  * Copyright (C) 1995-1998  Brian Paul | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,18 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: svgamesa.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 3.0  1998/02/20 05:07:24  brianp | ||||
|  * initial rev | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA/Mesa interface for Linux. | ||||
|  */ | ||||
| @@ -65,7 +53,7 @@ | ||||
|  | ||||
|  | ||||
| #define SVGAMESA_MAJOR_VERSION 3 | ||||
| #define SVGAMESA_MINOR_VERSION 0 | ||||
| #define SVGAMESA_MINOR_VERSION 2 | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| @@ -87,16 +75,21 @@ typedef struct svgamesa_context *SVGAMesaContext; | ||||
| /* | ||||
|  * doubleBuffer flag new in version 2.4 | ||||
|  */ | ||||
| extern int SVGAMesaInit( int GraphMode ); | ||||
|  | ||||
| extern int SVGAMesaClose( void ); | ||||
|  | ||||
| extern SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer ); | ||||
|  | ||||
| extern void SVGAMesaDestroyContext( SVGAMesaContext ctx ); | ||||
|  | ||||
| extern void SVGAMesaMakeCurrent( SVGAMesaContext ctx ); | ||||
|  | ||||
| extern SVGAMesaContext SVGAMesaGetCurrentContext( void ); | ||||
|  | ||||
| extern void SVGAMesaSwapBuffers( void ); | ||||
|  | ||||
| extern void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue); | ||||
|  | ||||
| extern SVGAMesaContext SVGAMesaGetCurrentContext( void ); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| /* $Id: xmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: xmesa.h,v 1.1.1.1.2.3 2000/02/09 18:53:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
| @@ -25,23 +25,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: xmesa.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 1.3  1999/02/24 22:43:27  jens | ||||
|  * Name changes to get XMesa to compile standalone inside XFree86 | ||||
|  * | ||||
|  * Revision 1.2  1999/02/14 03:39:09  brianp | ||||
|  * new copyright | ||||
|  * | ||||
|  * Revision 1.1  1998/02/13 03:17:32  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Mesa/X11 interface.  This header file serves as the documentation for | ||||
|  * the Mesa/X11 interface functions. | ||||
| @@ -96,6 +79,9 @@ extern "C" { | ||||
| #include <X11/Xlib.h> | ||||
| #include <X11/Xutil.h> | ||||
| #include "xmesa_x.h" | ||||
| #ifdef GLX_DIRECT_RENDERING | ||||
| #include "dri_mesa.h" | ||||
| #endif | ||||
| #endif | ||||
| #include "GL/gl.h" | ||||
|  | ||||
| @@ -106,7 +92,7 @@ extern struct Library *XLibBase; | ||||
|  | ||||
|  | ||||
| #define XMESA_MAJOR_VERSION 3 | ||||
| #define XMESA_MINOR_VERSION 0 | ||||
| #define XMESA_MINOR_VERSION 2 | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -131,7 +117,17 @@ typedef struct xmesa_visual *XMesaVisual; | ||||
|  | ||||
| typedef struct xmesa_buffer *XMesaBuffer; | ||||
|  | ||||
| #if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server) | ||||
| /* | ||||
|  * Initialize the XMesa driver. | ||||
|  */ | ||||
| extern GLboolean XMesaInitDriver( __DRIscreenPrivate *driScrnPriv ); | ||||
|  | ||||
| /* | ||||
|  * Reset the XMesa driver when the X server resets. | ||||
|  */ | ||||
| extern void XMesaResetDriver( __DRIscreenPrivate *driScrnPriv ); | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* | ||||
| @@ -179,7 +175,11 @@ extern void XMesaDestroyVisual( XMesaVisual v ); | ||||
|  * Return:  an XMesaContext or NULL if error. | ||||
|  */ | ||||
| extern XMesaContext XMesaCreateContext( XMesaVisual v, | ||||
| 					XMesaContext share_list ); | ||||
| 					XMesaContext share_list | ||||
| #if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server) | ||||
| 					, __DRIcontextPrivate *driContextPriv | ||||
| #endif | ||||
| 				      ); | ||||
|  | ||||
|  | ||||
| /* | ||||
| @@ -192,7 +192,12 @@ extern void XMesaDestroyContext( XMesaContext c ); | ||||
|  * Create an XMesaBuffer from an X window. | ||||
|  */ | ||||
| extern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v, | ||||
| 					    XMesaWindow w ); | ||||
| 					    XMesaWindow w | ||||
| #if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server) | ||||
| 					    , __DRIdrawablePrivate *driDrawPriv | ||||
| #endif | ||||
| 					  ); | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
| @@ -200,7 +205,12 @@ extern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v, | ||||
|  */ | ||||
| extern XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v, | ||||
| 					    XMesaPixmap p, | ||||
| 					    XMesaColormap cmap ); | ||||
| 					    XMesaColormap cmap | ||||
| #if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server) | ||||
| 					    , __DRIdrawablePrivate *driDrawPriv | ||||
| #endif | ||||
| 					  ); | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -30,7 +30,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * Authors: | ||||
|  *   Kevin E. Martin <kevin@precisioninsight.com> | ||||
|  * | ||||
|  * $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/include/GL/xmesa_xf86.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ | ||||
|  * $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/include/GL/xmesa_xf86.h,v 1.1.1.1.2.1 1999/12/13 21:54:19 brianp Exp $ | ||||
|  */ | ||||
|  | ||||
| #ifndef _XMESA_XF86_H_ | ||||
| @@ -52,29 +52,29 @@ typedef DDXPointRec XMesaPoint; | ||||
| typedef xColorItem  XMesaColor; | ||||
|  | ||||
| #define XMesaSetGeneric(__d,__gc,__val,__mask) \ | ||||
| { \ | ||||
| do { \ | ||||
|     CARD32 __v[1]; \ | ||||
|     (void) __d; \ | ||||
|     __v[0] = __val; \ | ||||
|     dixChangeGC(NullClient, __gc, __mask, __v, NULL); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaSetGenericPtr(__d,__gc,__pval,__mask) \ | ||||
| { \ | ||||
| do { \ | ||||
|     ChangeGCVal __v[1]; \ | ||||
|     (void) __d; \ | ||||
|     __v[0].ptr = __pval; \ | ||||
|     dixChangeGC(NullClient, __gc, __mask, NULL, __v); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaSetDashes(__d,__gc,__do,__dl,__n) \ | ||||
| { \ | ||||
| do { \ | ||||
|     (void) __d; \ | ||||
|     SetDashes(__gc, __do, __n, (unsigned char *)__dl); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaSetLineAttributes(__d,__gc,__lw,__ls,__cs,__js) \ | ||||
| { \ | ||||
| do { \ | ||||
|     CARD32 __v[4]; \ | ||||
|     (void) __d; \ | ||||
|     __v[0] = __lw; \ | ||||
| @@ -84,7 +84,7 @@ typedef xColorItem  XMesaColor; | ||||
|     dixChangeGC(NullClient, __gc, \ | ||||
| 		GCLineWidth|GCLineStyle|GCCapStyle|GCJoinStyle, \ | ||||
| 		__v, NULL); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaSetForeground(d,gc,v) XMesaSetGeneric(d,gc,v,GCForeground) | ||||
| #define XMesaSetBackground(d,gc,v) XMesaSetGeneric(d,gc,v,GCBackground) | ||||
| @@ -96,24 +96,24 @@ typedef xColorItem  XMesaColor; | ||||
| #define XMesaSetStipple(d,gc,v)    XMesaSetGenericPtr(d,gc,v,GCStipple) | ||||
|  | ||||
| #define XMesaDrawPoint(__d,__b,__gc,__x,__y) \ | ||||
| { \ | ||||
| do { \ | ||||
|     XMesaPoint __p[1]; \ | ||||
|     (void) __d; \ | ||||
|     __p[0].x = __x; \ | ||||
|     __p[0].y = __y; \ | ||||
|     ValidateGC(__b, __gc); \ | ||||
|     (*gc->ops->PolyPoint)(__b, __gc, CoordModeOrigin, 1, __p); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaDrawPoints(__d,__b,__gc,__p,__n,__m) \ | ||||
| { \ | ||||
| do { \ | ||||
|     (void) __d; \ | ||||
|     ValidateGC(__b, __gc); \ | ||||
|     (*gc->ops->PolyPoint)(__b, __gc, __m, __n, __p); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaDrawLine(__d,__b,__gc,__x0,__y0,__x1,__y1) \ | ||||
| { \ | ||||
| do { \ | ||||
|     XMesaPoint __p[2]; \ | ||||
|     (void) __d; \ | ||||
|     ValidateGC(__b, __gc); \ | ||||
| @@ -122,10 +122,10 @@ typedef xColorItem  XMesaColor; | ||||
|     __p[1].x = __x1; \ | ||||
|     __p[1].y = __y1; \ | ||||
|     (*__gc->ops->Polylines)(__b, __gc, CoordModeOrigin, 2, __p); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaFillRectangle(__d,__b,__gc,__x,__y,__w,__h) \ | ||||
| { \ | ||||
| do { \ | ||||
|     xRectangle __r[1]; \ | ||||
|     (void) __d; \ | ||||
|     ValidateGC(__b, __gc); \ | ||||
| @@ -134,10 +134,10 @@ typedef xColorItem  XMesaColor; | ||||
|     __r[0].width = __w; \ | ||||
|     __r[0].height = __h; \ | ||||
|     (*__gc->ops->PolyFillRect)(__b, __gc, 1, __r); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaPutImage(__d,__b,__gc,__i,__sx,__sy,__x,__y,__w,__h) \ | ||||
| { \ | ||||
| do { \ | ||||
|     /* Assumes: Images are always in ZPixmap format */ \ | ||||
|     (void) __d; \ | ||||
|     if (__sx || __sy) /* The non-trivial case */ \ | ||||
| @@ -146,22 +146,22 @@ typedef xColorItem  XMesaColor; | ||||
|     (*__gc->ops->PutImage)(__b, __gc, ((XMesaDrawable)(__b))->depth, \ | ||||
| 			   __x, __y, __w, __h, 0, ZPixmap, \ | ||||
| 			   ((XMesaImage *)(__i))->data); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaCopyArea(__d,__sb,__db,__gc,__sx,__sy,__w,__h,__x,__y) \ | ||||
| { \ | ||||
| do { \ | ||||
|     (void) __d; \ | ||||
|     ValidateGC(__db, __gc); \ | ||||
|     (*__gc->ops->CopyArea)((DrawablePtr)__sb, __db, __gc, \ | ||||
| 			   __sx, __sy, __w, __h, __x, __y); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define XMesaFillPolygon(__d,__b,__gc,__p,__n,__s,__m) \ | ||||
| { \ | ||||
| do { \ | ||||
|     (void) __d; \ | ||||
|     ValidateGC(__b, __gc); \ | ||||
|     (*__gc->ops->FillPolygon)(__b, __gc, __s, __m, __n, __p); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| /* CreatePixmap returns a PixmapPtr; so, it cannot be inside braces */ | ||||
| #define XMesaCreatePixmap(__d,__b,__w,__h,__depth) \ | ||||
| @@ -170,10 +170,10 @@ typedef xColorItem  XMesaColor; | ||||
|     (*__d->DestroyPixmap)(__b) | ||||
|  | ||||
| #define XMesaFreeGC(__d,__gc) \ | ||||
| { \ | ||||
| do { \ | ||||
|     (void) __d; \ | ||||
|     FreeScratchGC(__gc); \ | ||||
| } | ||||
| } while (0) | ||||
|  | ||||
| #define GET_COLORMAP_SIZE(__v)  __v->visinfo->ColormapEntries | ||||
| #define GET_REDMASK(__v)        __v->visinfo->redMask | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| # $Id: Makefile.X11,v 1.3 1999/10/27 10:09:53 brianp Exp $ | ||||
| # $Id: Makefile.X11,v 1.3.2.1 2000/04/24 15:29:02 brianp Exp $ | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.1 | ||||
| # Copyright (C) 1995-1998  Brian Paul | ||||
| # Version:  3.2 | ||||
| # Copyright (C) 1995-2000  Brian Paul | ||||
|  | ||||
|  | ||||
| # Makefile for GLUT-based demo programs for Unix/X11 | ||||
| @@ -19,7 +19,7 @@ LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB) | ||||
|  | ||||
| PROGS = bounce clearspd drawpix gamma gears glinfo gloss glutfx isosurf \ | ||||
| 	morph3d multiarb osdemo paltex pointblast reflect \ | ||||
| 	renormal spectex stex3d tessdemo texcyl texobj trispd winpos \ | ||||
| 	renormal spectex stex3d tessdemo texcyl texobj trispd winpos | ||||
|  | ||||
|  | ||||
| ##### RULES ##### | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| /* $Id: gamma.c,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: gamma.c,v 1.1.1.1.2.1 2000/03/18 01:14:01 brianp Exp $ */ | ||||
|  | ||||
| /* Draw test patterns to help determine correct gamma value for a display. | ||||
|    When the intensities of the inner squares nearly match the intensities | ||||
| @@ -25,8 +25,14 @@ | ||||
|  | ||||
| /* | ||||
|  * $Log: gamma.c,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * Revision 1.1.1.1.2.1  2000/03/18 01:14:01  brianp | ||||
|  * colors were computed incorrectly (Hans Nelles) | ||||
|  * | ||||
|  * Revision 1.2  2000/03/18 01:13:29  brianp | ||||
|  * colors were computed incorrectly (Hans Nelles) | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:40  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 3.1  1999/06/19 01:35:38  brianp | ||||
|  * merged in Kai Schuetz's RGB changes | ||||
| @@ -130,8 +136,9 @@ gamma_ramp(GLfloat yoffs, GLfloat r, GLfloat g, GLfloat b) | ||||
|  | ||||
|   for(d = 1; d < 4; d++) {  /* increasing density from 25% to 75% */ | ||||
|     GLfloat xcoord = (-1.0 + d*0.4); | ||||
|     GLfloat t = d * 0.25; | ||||
|  | ||||
|     glColor3f(r*d / 5.0, g*d / 5.0, b*d / 5.0); /* draw outer rect */ | ||||
|     glColor3f(r*t, g*t, b*t); /* draw outer rect */ | ||||
|     glRectf(xcoord, yoffs, xcoord+0.4, yoffs + 0.5); | ||||
|  | ||||
|     glColor3f(0.0, 0.0, 0.0);   /* "clear" inner rect */ | ||||
|   | ||||
| @@ -1,7 +1,10 @@ | ||||
| /* $Id: morph3d.c,v 1.2 1999/09/17 12:27:01 brianp Exp $ */ | ||||
| /* $Id: morph3d.c,v 1.2.2.1 1999/12/15 13:00:24 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * $Log: morph3d.c,v $ | ||||
|  * Revision 1.2.2.1  1999/12/15 13:00:24  brianp | ||||
|  * moved #define to column 0 | ||||
|  * | ||||
|  * Revision 1.2  1999/09/17 12:27:01  brianp | ||||
|  * silenced some warnings | ||||
|  * | ||||
| @@ -498,7 +501,7 @@ static void draw_dodeca( void ) | ||||
| { | ||||
|   GLuint list; | ||||
|  | ||||
|   #define TAU ((SQRT5+1)/2) | ||||
| #define TAU ((SQRT5+1)/2) | ||||
|  | ||||
|   list = glGenLists( 1 ); | ||||
|   glNewList( list, GL_COMPILE ); | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: multiarb.c,v 1.3 1999/10/21 16:40:32 brianp Exp $ */ | ||||
| /* $Id: multiarb.c,v 1.3.2.2 2000/02/02 17:32:15 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * GL_ARB_multitexture demo | ||||
| @@ -12,6 +12,12 @@ | ||||
|  | ||||
| /* | ||||
|  * $Log: multiarb.c,v $ | ||||
|  * Revision 1.3.2.2  2000/02/02 17:32:15  brianp | ||||
|  * changed > to >= | ||||
|  * | ||||
|  * Revision 1.3.2.1  2000/02/02 01:08:09  brianp | ||||
|  * limit Drift to [0, 1] | ||||
|  * | ||||
|  * Revision 1.3  1999/10/21 16:40:32  brianp | ||||
|  * added -info command line option | ||||
|  * | ||||
| @@ -61,6 +67,8 @@ static void Idle( void ) | ||||
| { | ||||
|    if (Animate) { | ||||
|       Drift += 0.05; | ||||
|       if (Drift >= 1.0) | ||||
|          Drift = 0.0; | ||||
|  | ||||
| #ifdef GL_ARB_multitexture | ||||
|       glActiveTextureARB(GL_TEXTURE0_ARB); | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: stex3d.c,v 1.2 1999/09/17 12:27:01 brianp Exp $ */ | ||||
| /* $Id: stex3d.c,v 1.2.2.1 1999/12/16 08:53:51 brianp Exp $ */ | ||||
|  | ||||
| /*-----------------------------  | ||||
|  * stex3d.c GL example of the mesa 3d-texture extention to simulate procedural | ||||
| @@ -17,6 +17,9 @@ | ||||
|  | ||||
| /* | ||||
|  * $Log: stex3d.c,v $ | ||||
|  * Revision 1.2.2.1  1999/12/16 08:53:51  brianp | ||||
|  * added a cast to malloc call | ||||
|  * | ||||
|  * Revision 1.2  1999/09/17 12:27:01  brianp | ||||
|  * silenced some warnings | ||||
|  * | ||||
| @@ -230,7 +233,7 @@ void create3Dtexture() | ||||
|  int tmp; | ||||
|  | ||||
|  printf("creating 3d textures...\n"); | ||||
|  voxels = (unsigned char  *) malloc((4*tex_width*tex_height*tex_depth)); | ||||
|  voxels = (unsigned char  *) malloc((size_t) (4*tex_width*tex_height*tex_depth)); | ||||
|  vp=voxels; | ||||
|  for (i=0;i<tex_width;i++){ | ||||
|     vec[0]=i; | ||||
|   | ||||
| @@ -1,48 +1,7 @@ | ||||
| /* $Id: tessdemo.c,v 1.3 1999/11/04 04:00:42 gareth Exp $ */ | ||||
| /* $Id: tessdemo.c,v 1.3.2.3 2000/07/11 01:45:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * A demo of the GLU polygon tesselation functions written by Bogdan Sikorski. | ||||
|  * This demo isn't built by the Makefile because it needs GLUT.  After you've | ||||
|  * installed GLUT you can try this demo. | ||||
|  * Here's the command for IRIX, for example: | ||||
|    cc -g -ansi -prototypes -fullwarn -float -I../include -DSHM tess_demo.c -L../lib -lglut -lMesaGLU -lMesaGL -lm -lX11 -lXext -lXmu -lfpe -lXext -o tess_demo | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * Updated for GLU 1.3 tessellation by Gareth Hughes <garethh@bell-labs.com> | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * $Log: tessdemo.c,v $ | ||||
|  * Revision 1.3  1999/11/04 04:00:42  gareth | ||||
|  * Updated demo for new GLU 1.3 tessellation.  Added optimized rendering | ||||
|  * by saving the output of the tessellation into display lists. | ||||
|  * | ||||
|  * Revision 1.2  1999/09/19 20:09:00  tanner | ||||
|  * | ||||
|  * lots of autoconf updates | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:40  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 3.5  1999/03/28 18:24:37  brianp | ||||
|  * minor clean-up | ||||
|  * | ||||
|  * Revision 3.4  1999/02/14 03:37:07  brianp | ||||
|  * fixed callback problem | ||||
|  * | ||||
|  * Revision 3.3  1998/07/26 01:25:26  brianp | ||||
|  * removed include of gl.h and glu.h | ||||
|  * | ||||
|  * Revision 3.2  1998/06/29 02:37:30  brianp | ||||
|  * minor changes for Windows (Ted Jump) | ||||
|  * | ||||
|  * Revision 3.1  1998/06/09 01:53:49  brianp | ||||
|  * main() should return an int | ||||
|  * | ||||
|  * Revision 3.0  1998/02/14 18:42:29  brianp | ||||
|  * initial rev | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| @@ -51,405 +10,322 @@ | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #define MAX_POINTS	256 | ||||
| #define MAX_CONTOURS	32 | ||||
| #define MAX_TRIANGLES	256 | ||||
| #define MAX_POINTS 200 | ||||
| #define MAX_CONTOURS 50 | ||||
|  | ||||
| #ifndef GLCALLBACK | ||||
| #ifdef CALLBACK | ||||
| #define GLCALLBACK CALLBACK | ||||
| #else | ||||
| #define GLCALLBACK | ||||
| #endif | ||||
| #endif | ||||
| static int menu; | ||||
| typedef enum | ||||
| { QUIT, TESSELATE, CLEAR } | ||||
| menu_entries; | ||||
|  | ||||
| typedef enum{ QUIT, TESSELATE, CLEAR } menu_entries; | ||||
| typedef enum{ DEFINE, TESSELATED } mode_type; | ||||
| typedef enum | ||||
| { DEFINE, TESSELATED } | ||||
| mode_type; | ||||
|  | ||||
| static GLsizei		width, height; | ||||
| static GLuint		contour_cnt; | ||||
| static GLuint		triangle_cnt; | ||||
|  | ||||
| static mode_type 	mode; | ||||
| static int		menu; | ||||
|  | ||||
| static GLuint		list_start; | ||||
|  | ||||
| static GLfloat		edge_color[3]; | ||||
|  | ||||
| static struct | ||||
| struct | ||||
| { | ||||
|    GLint	p[MAX_POINTS][2]; | ||||
|    GLuint	point_cnt; | ||||
| } contours[MAX_CONTOURS]; | ||||
|    GLint p[MAX_POINTS][2]; | ||||
|    GLuint point_cnt; | ||||
| } | ||||
| contours[MAX_CONTOURS]; | ||||
|  | ||||
| static struct | ||||
| static GLuint contour_cnt; | ||||
| static GLsizei width, height; | ||||
| static mode_type mode; | ||||
|  | ||||
| struct | ||||
| { | ||||
|    GLsizei	no; | ||||
|    GLint	p[3][2]; | ||||
|    GLclampf	color[3][3]; | ||||
| } triangles[MAX_TRIANGLES]; | ||||
|    GLsizei no; | ||||
|    GLfloat color[3]; | ||||
|    GLint p[3][2]; | ||||
|    GLclampf p_color[3][3]; | ||||
| } | ||||
| triangle; | ||||
|  | ||||
|  | ||||
|  | ||||
| void GLCALLBACK my_error( GLenum err ) | ||||
| static void GLCALLBACK | ||||
| my_error(GLenum err) | ||||
| { | ||||
|    int		len, i; | ||||
|    char const	*str; | ||||
|    int len, i; | ||||
|    char const *str; | ||||
|  | ||||
|    glColor3f( 0.9, 0.9, 0.9 ); | ||||
|    glRasterPos2i( 5, 5 ); | ||||
|    glColor3f(0.9, 0.9, 0.9); | ||||
|    glRasterPos2i(5, 5); | ||||
|    str = (const char *) gluErrorString(err); | ||||
|    len = strlen(str); | ||||
|    for (i = 0; i < len; i++) | ||||
|       glutBitmapCharacter(GLUT_BITMAP_9_BY_15, str[i]); | ||||
| } | ||||
|  | ||||
|    str = (const char *) gluErrorString( err ); | ||||
|    len = strlen( str ); | ||||
|  | ||||
|    for ( i = 0 ; i < len ; i++ ) { | ||||
|       glutBitmapCharacter( GLUT_BITMAP_9_BY_15, str[i] ); | ||||
| static void GLCALLBACK | ||||
| begin_callback(GLenum mode) | ||||
| { | ||||
|    triangle.no = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| static void GLCALLBACK | ||||
| edge_callback(GLenum flag) | ||||
| { | ||||
|    if (flag == GL_TRUE) { | ||||
|       triangle.color[0] = 1.0; | ||||
|       triangle.color[1] = 1.0; | ||||
|       triangle.color[2] = 0.5; | ||||
|    } | ||||
|    else { | ||||
|       triangle.color[0] = 1.0; | ||||
|       triangle.color[1] = 0.0; | ||||
|       triangle.color[2] = 0.0; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void GLCALLBACK begin_callback( GLenum mode ) | ||||
|  | ||||
| static void GLCALLBACK | ||||
| end_callback() | ||||
| { | ||||
|    /* Allow multiple triangles to be output inside the begin/end pair. */ | ||||
|    triangle_cnt = 0; | ||||
|    triangles[triangle_cnt].no = 0; | ||||
| } | ||||
|  | ||||
| void GLCALLBACK edge_callback( GLenum flag ) | ||||
| { | ||||
|    /* Persist the edge flag across triangles. */ | ||||
|    if ( flag == GL_TRUE ) | ||||
|    { | ||||
|       edge_color[0] = 1.0; | ||||
|       edge_color[1] = 1.0; | ||||
|       edge_color[2] = 0.5; | ||||
|    } | ||||
|    else | ||||
|    { | ||||
|       edge_color[0] = 1.0; | ||||
|       edge_color[1] = 0.0; | ||||
|       edge_color[2] = 0.0; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void GLCALLBACK end_callback() | ||||
| { | ||||
|    GLint	i; | ||||
|  | ||||
|    glBegin( GL_LINES ); | ||||
|  | ||||
|    /* Output the three edges of each triangle as lines colored | ||||
|       according to their edge flag. */ | ||||
|    for ( i = 0 ; i < triangle_cnt ; i++ ) | ||||
|    { | ||||
|       glColor3f( triangles[i].color[0][0], | ||||
| 		 triangles[i].color[0][1], | ||||
| 		 triangles[i].color[0][2] ); | ||||
|  | ||||
|       glVertex2i( triangles[i].p[0][0], triangles[i].p[0][1] ); | ||||
|       glVertex2i( triangles[i].p[1][0], triangles[i].p[1][1] ); | ||||
|  | ||||
|       glColor3f( triangles[i].color[1][0], | ||||
| 		 triangles[i].color[1][1], | ||||
| 		 triangles[i].color[1][2] ); | ||||
|  | ||||
|       glVertex2i( triangles[i].p[1][0], triangles[i].p[1][1] ); | ||||
|       glVertex2i( triangles[i].p[2][0], triangles[i].p[2][1] ); | ||||
|  | ||||
|       glColor3f( triangles[i].color[2][0], | ||||
| 		 triangles[i].color[2][1], | ||||
| 		 triangles[i].color[2][2] ); | ||||
|  | ||||
|       glVertex2i( triangles[i].p[2][0], triangles[i].p[2][1] ); | ||||
|       glVertex2i( triangles[i].p[0][0], triangles[i].p[0][1] ); | ||||
|    } | ||||
|  | ||||
|    glBegin(GL_LINES); | ||||
|    glColor3f(triangle.p_color[0][0], triangle.p_color[0][1], | ||||
| 	     triangle.p_color[0][2]); | ||||
|    glVertex2i(triangle.p[0][0], triangle.p[0][1]); | ||||
|    glVertex2i(triangle.p[1][0], triangle.p[1][1]); | ||||
|    glColor3f(triangle.p_color[1][0], triangle.p_color[1][1], | ||||
| 	     triangle.p_color[1][2]); | ||||
|    glVertex2i(triangle.p[1][0], triangle.p[1][1]); | ||||
|    glVertex2i(triangle.p[2][0], triangle.p[2][1]); | ||||
|    glColor3f(triangle.p_color[2][0], triangle.p_color[2][1], | ||||
| 	     triangle.p_color[2][2]); | ||||
|    glVertex2i(triangle.p[2][0], triangle.p[2][1]); | ||||
|    glVertex2i(triangle.p[0][0], triangle.p[0][1]); | ||||
|    glEnd(); | ||||
| } | ||||
|  | ||||
| void GLCALLBACK vertex_callback( void *data ) | ||||
|  | ||||
| static void GLCALLBACK | ||||
| vertex_callback(void *data) | ||||
| { | ||||
|    GLsizei	no; | ||||
|    GLint	*p; | ||||
|    GLsizei no; | ||||
|    GLint *p; | ||||
|  | ||||
|    p = (GLint *) data; | ||||
|    no = triangles[triangle_cnt].no; | ||||
|  | ||||
|    triangles[triangle_cnt].p[no][0] = p[0]; | ||||
|    triangles[triangle_cnt].p[no][1] = p[1]; | ||||
|  | ||||
|    triangles[triangle_cnt].color[no][0] = edge_color[0]; | ||||
|    triangles[triangle_cnt].color[no][1] = edge_color[1]; | ||||
|    triangles[triangle_cnt].color[no][2] = edge_color[2]; | ||||
|  | ||||
|    /* After every three vertices, initialize the next triangle. */ | ||||
|    if ( ++(triangles[triangle_cnt].no) == 3 ) | ||||
|    { | ||||
|       triangle_cnt++; | ||||
|       triangles[triangle_cnt].no = 0; | ||||
|    } | ||||
|    no = triangle.no; | ||||
|    triangle.p[no][0] = p[0]; | ||||
|    triangle.p[no][1] = p[1]; | ||||
|    triangle.p_color[no][0] = triangle.color[0]; | ||||
|    triangle.p_color[no][1] = triangle.color[1]; | ||||
|    triangle.p_color[no][2] = triangle.color[2]; | ||||
|    ++(triangle.no); | ||||
| } | ||||
|  | ||||
| void set_screen_wh( GLsizei w, GLsizei h ) | ||||
|  | ||||
| static void | ||||
| set_screen_wh(GLsizei w, GLsizei h) | ||||
| { | ||||
|    width = w; | ||||
|    height = h; | ||||
| } | ||||
|  | ||||
| void tesse( void ) | ||||
| { | ||||
|    GLUtesselator	*tobj; | ||||
|    GLdouble		data[3]; | ||||
|    GLuint		i, j, point_cnt; | ||||
|  | ||||
|    list_start = glGenLists( 2 ); | ||||
| static void | ||||
| tesse(void) | ||||
| { | ||||
|    GLUtriangulatorObj *tobj; | ||||
|    GLdouble data[3]; | ||||
|    GLuint i, j, point_cnt; | ||||
|  | ||||
|    tobj = gluNewTess(); | ||||
|  | ||||
|    if ( tobj != NULL ) | ||||
|    { | ||||
|       gluTessCallback( tobj, GLU_BEGIN, glBegin ); | ||||
|       gluTessCallback( tobj, GLU_VERTEX, glVertex2iv ); | ||||
|       gluTessCallback( tobj, GLU_END, glEnd ); | ||||
|       gluTessCallback( tobj, GLU_ERROR, my_error ); | ||||
|  | ||||
|       glNewList( list_start, GL_COMPILE ); | ||||
|       gluBeginPolygon( tobj ); | ||||
|  | ||||
|       for ( j = 0 ; j <= contour_cnt ; j++ ) | ||||
|       { | ||||
|    if (tobj != NULL) { | ||||
|       glClear(GL_COLOR_BUFFER_BIT); | ||||
|       glColor3f(0.7, 0.7, 0.0); | ||||
|       gluTessCallback(tobj, GLU_BEGIN, glBegin); | ||||
|       gluTessCallback(tobj, GLU_END, glEnd); | ||||
|       gluTessCallback(tobj, GLU_ERROR, my_error); | ||||
|       gluTessCallback(tobj, GLU_VERTEX, glVertex2iv); | ||||
|       gluBeginPolygon(tobj); | ||||
|       for (j = 0; j <= contour_cnt; j++) { | ||||
| 	 point_cnt = contours[j].point_cnt; | ||||
| 	 gluNextContour( tobj, GLU_UNKNOWN ); | ||||
|  | ||||
| 	 for ( i = 0 ; i < point_cnt ; i++ ) | ||||
| 	 { | ||||
| 	    data[0] = (GLdouble)( contours[j].p[i][0] ); | ||||
| 	    data[1] = (GLdouble)( contours[j].p[i][1] ); | ||||
| 	 gluNextContour(tobj, GLU_UNKNOWN); | ||||
| 	 for (i = 0; i < point_cnt; i++) { | ||||
| 	    data[0] = (GLdouble) (contours[j].p[i][0]); | ||||
| 	    data[1] = (GLdouble) (contours[j].p[i][1]); | ||||
| 	    data[2] = 0.0; | ||||
| 	    gluTessVertex( tobj, data, contours[j].p[i] ); | ||||
| 	    gluTessVertex(tobj, data, contours[j].p[i]); | ||||
| 	 } | ||||
|       } | ||||
|  | ||||
|       gluEndPolygon( tobj ); | ||||
|       glEndList(); | ||||
|  | ||||
|       gluTessCallback( tobj, GLU_BEGIN, begin_callback ); | ||||
|       gluTessCallback( tobj, GLU_VERTEX, vertex_callback ); | ||||
|       gluTessCallback( tobj, GLU_END, end_callback ); | ||||
|       gluTessCallback( tobj, GLU_EDGE_FLAG, edge_callback ); | ||||
|  | ||||
|       glNewList( list_start + 1, GL_COMPILE ); | ||||
|       gluBeginPolygon( tobj ); | ||||
|  | ||||
|       for ( j = 0 ; j <= contour_cnt ; j++ ) | ||||
|       { | ||||
|       gluEndPolygon(tobj); | ||||
|       glLineWidth(2.0); | ||||
|       gluTessCallback(tobj, GLU_BEGIN, begin_callback); | ||||
|       gluTessCallback(tobj, GLU_END, end_callback); | ||||
|       gluTessCallback(tobj, GLU_VERTEX, vertex_callback); | ||||
|       gluTessCallback(tobj, GLU_EDGE_FLAG, edge_callback); | ||||
|       gluBeginPolygon(tobj); | ||||
|       for (j = 0; j <= contour_cnt; j++) { | ||||
| 	 point_cnt = contours[j].point_cnt; | ||||
| 	 gluNextContour( tobj, GLU_UNKNOWN ); | ||||
|  | ||||
| 	 for ( i = 0 ; i < point_cnt ; i++ ) | ||||
| 	 { | ||||
| 	    data[0] = (GLdouble)( contours[j].p[i][0] ); | ||||
| 	    data[1] = (GLdouble)( contours[j].p[i][1] ); | ||||
| 	 gluNextContour(tobj, GLU_UNKNOWN); | ||||
| 	 for (i = 0; i < point_cnt; i++) { | ||||
| 	    data[0] = (GLdouble) (contours[j].p[i][0]); | ||||
| 	    data[1] = (GLdouble) (contours[j].p[i][1]); | ||||
| 	    data[2] = 0.0; | ||||
| 	    gluTessVertex( tobj, data, contours[j].p[i] ); | ||||
| 	    gluTessVertex(tobj, data, contours[j].p[i]); | ||||
| 	 } | ||||
|       } | ||||
|  | ||||
|       gluEndPolygon( tobj ); | ||||
|       glEndList(); | ||||
|  | ||||
|       gluDeleteTess( tobj ); | ||||
|  | ||||
|       glutMouseFunc( NULL ); | ||||
|       gluEndPolygon(tobj); | ||||
|       gluDeleteTess(tobj); | ||||
|       glutMouseFunc(NULL); | ||||
|       glColor3f(1.0, 1.0, 0.0); | ||||
|       glLineWidth(1.0); | ||||
|       mode = TESSELATED; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void left_down( int x1, int y1 ) | ||||
|  | ||||
| static void | ||||
| left_down(int x1, int y1) | ||||
| { | ||||
|    GLint	P[2]; | ||||
|    GLuint	point_cnt; | ||||
|    GLint P[2]; | ||||
|    GLuint point_cnt; | ||||
|  | ||||
|    /* translate GLUT into GL coordinates */ | ||||
|  | ||||
|    P[0] = x1; | ||||
|    P[1] = height - y1; | ||||
|  | ||||
|    point_cnt = contours[contour_cnt].point_cnt; | ||||
|  | ||||
|    contours[contour_cnt].p[point_cnt][0] = P[0]; | ||||
|    contours[contour_cnt].p[point_cnt][1] = P[1]; | ||||
|  | ||||
|    glBegin( GL_LINES ); | ||||
|  | ||||
|    if ( point_cnt ) | ||||
|    { | ||||
|       glVertex2iv( contours[contour_cnt].p[point_cnt-1] ); | ||||
|       glVertex2iv( P ); | ||||
|    glBegin(GL_LINES); | ||||
|    if (point_cnt) { | ||||
|       glVertex2iv(contours[contour_cnt].p[point_cnt - 1]); | ||||
|       glVertex2iv(P); | ||||
|    } | ||||
|    else | ||||
|    { | ||||
|       glVertex2iv( P ); | ||||
|       glVertex2iv( P ); | ||||
|    else { | ||||
|       glVertex2iv(P); | ||||
|       glVertex2iv(P); | ||||
|    } | ||||
|  | ||||
|    glEnd(); | ||||
|    glFinish(); | ||||
|  | ||||
|    contours[contour_cnt].point_cnt++; | ||||
|    ++(contours[contour_cnt].point_cnt); | ||||
| } | ||||
|  | ||||
| void middle_down( int x1, int y1 ) | ||||
|  | ||||
| static void | ||||
| middle_down(int x1, int y1) | ||||
| { | ||||
|    GLuint	point_cnt; | ||||
|    (void) x1; | ||||
|    (void) y1; | ||||
|    GLuint point_cnt; | ||||
|  | ||||
|    point_cnt = contours[contour_cnt].point_cnt; | ||||
|  | ||||
|    if ( point_cnt > 2 ) | ||||
|    { | ||||
|       glBegin( GL_LINES ); | ||||
|  | ||||
|       glVertex2iv( contours[contour_cnt].p[0] ); | ||||
|       glVertex2iv( contours[contour_cnt].p[point_cnt-1] ); | ||||
|  | ||||
|    if (point_cnt > 2) { | ||||
|       glBegin(GL_LINES); | ||||
|       glVertex2iv(contours[contour_cnt].p[0]); | ||||
|       glVertex2iv(contours[contour_cnt].p[point_cnt - 1]); | ||||
|       contours[contour_cnt].p[point_cnt][0] = -1; | ||||
|  | ||||
|       glEnd(); | ||||
|       glFinish(); | ||||
|  | ||||
|       contour_cnt++; | ||||
|       contours[contour_cnt].point_cnt = 0; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void mouse_clicked( int button, int state, int x, int y ) | ||||
| { | ||||
|    x -= x%10; | ||||
|    y -= y%10; | ||||
|  | ||||
|    switch ( button ) | ||||
|    { | ||||
| static void | ||||
| mouse_clicked(int button, int state, int x, int y) | ||||
| { | ||||
|    x -= x % 10; | ||||
|    y -= y % 10; | ||||
|    switch (button) { | ||||
|    case GLUT_LEFT_BUTTON: | ||||
|       if ( state == GLUT_DOWN ) { | ||||
| 	 left_down( x, y ); | ||||
|       } | ||||
|       if (state == GLUT_DOWN) | ||||
| 	 left_down(x, y); | ||||
|       break; | ||||
|    case GLUT_MIDDLE_BUTTON: | ||||
|       if ( state == GLUT_DOWN ) { | ||||
| 	 middle_down( x, y ); | ||||
|       } | ||||
|       if (state == GLUT_DOWN) | ||||
| 	 middle_down(x, y); | ||||
|       break; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void display( void ) | ||||
|  | ||||
| static void | ||||
| display(void) | ||||
| { | ||||
|    GLuint i,j; | ||||
|    GLuint i, j; | ||||
|    GLuint point_cnt; | ||||
|  | ||||
|    glClear( GL_COLOR_BUFFER_BIT ); | ||||
|  | ||||
|    switch ( mode ) | ||||
|    { | ||||
|    glClear(GL_COLOR_BUFFER_BIT); | ||||
|    switch (mode) { | ||||
|    case DEFINE: | ||||
|       /* draw grid */ | ||||
|       glColor3f( 0.6, 0.5, 0.5 ); | ||||
|  | ||||
|       glBegin( GL_LINES ); | ||||
|  | ||||
|       for ( i = 0 ; i < width ; i += 10 ) | ||||
|       { | ||||
| 	 for ( j = 0 ; j < height ; j += 10 ) | ||||
| 	 { | ||||
| 	    glVertex2i( 0, j ); | ||||
| 	    glVertex2i( width, j ); | ||||
| 	    glVertex2i( i, height ); | ||||
| 	    glVertex2i( i, 0 ); | ||||
|       glColor3f(0.6, 0.5, 0.5); | ||||
|       glBegin(GL_LINES); | ||||
|       for (i = 0; i < width; i += 10) | ||||
| 	 for (j = 0; j < height; j += 10) { | ||||
| 	    glVertex2i(0, j); | ||||
| 	    glVertex2i(width, j); | ||||
| 	    glVertex2i(i, height); | ||||
| 	    glVertex2i(i, 0); | ||||
| 	 } | ||||
|       } | ||||
|  | ||||
|       glColor3f( 1.0, 1.0, 0.0 ); | ||||
|  | ||||
|       for ( i = 0 ; i <= contour_cnt ; i++ ) | ||||
|       { | ||||
|       glEnd(); | ||||
|       glColor3f(1.0, 1.0, 0.0); | ||||
|       for (i = 0; i <= contour_cnt; i++) { | ||||
| 	 point_cnt = contours[i].point_cnt; | ||||
|  | ||||
| 	 glBegin( GL_LINES ); | ||||
|  | ||||
| 	 switch ( point_cnt ) | ||||
| 	 { | ||||
| 	 glBegin(GL_LINES); | ||||
| 	 switch (point_cnt) { | ||||
| 	 case 0: | ||||
| 	    break; | ||||
| 	 case 1: | ||||
| 	    glVertex2iv( contours[i].p[0] ); | ||||
| 	    glVertex2iv( contours[i].p[0] ); | ||||
| 	    glVertex2iv(contours[i].p[0]); | ||||
| 	    glVertex2iv(contours[i].p[0]); | ||||
| 	    break; | ||||
| 	 case 2: | ||||
| 	    glVertex2iv( contours[i].p[0] ); | ||||
| 	    glVertex2iv( contours[i].p[1] ); | ||||
| 	    glVertex2iv(contours[i].p[0]); | ||||
| 	    glVertex2iv(contours[i].p[1]); | ||||
| 	    break; | ||||
| 	 default: | ||||
| 	    --point_cnt; | ||||
| 	    for ( j = 0 ; j < point_cnt ; j++ ) | ||||
| 	    { | ||||
| 	       glVertex2iv( contours[i].p[j] ); | ||||
| 	       glVertex2iv( contours[i].p[j+1] ); | ||||
| 	    for (j = 0; j < point_cnt; j++) { | ||||
| 	       glVertex2iv(contours[i].p[j]); | ||||
| 	       glVertex2iv(contours[i].p[j + 1]); | ||||
| 	    } | ||||
| 	    if ( contours[i].p[j+1][0] == -1 ) | ||||
| 	    { | ||||
| 	       glVertex2iv( contours[i].p[0] ); | ||||
| 	       glVertex2iv( contours[i].p[j] ); | ||||
| 	    if (contours[i].p[j + 1][0] == -1) { | ||||
| 	       glVertex2iv(contours[i].p[0]); | ||||
| 	       glVertex2iv(contours[i].p[j]); | ||||
| 	    } | ||||
| 	    break; | ||||
| 	 } | ||||
|  | ||||
| 	 glEnd(); | ||||
|       } | ||||
|  | ||||
|       glFinish(); | ||||
|       break; | ||||
|  | ||||
|    case TESSELATED: | ||||
|       /* draw triangles */ | ||||
|       glColor3f( 0.7, 0.7, 0.0 ); | ||||
|       glCallList( list_start ); | ||||
|  | ||||
|       glLineWidth( 2.0 ); | ||||
|       glCallList( list_start + 1 ); | ||||
|       glLineWidth( 1.0 ); | ||||
|  | ||||
|       glFlush(); | ||||
|       /* draw lines */ | ||||
|       tesse(); | ||||
|       break; | ||||
|    } | ||||
|  | ||||
|    glColor3f( 1.0, 1.0, 0.0 ); | ||||
|    glColor3f(1.0, 1.0, 0.0); | ||||
| } | ||||
|  | ||||
| void clear( void ) | ||||
|  | ||||
| static void | ||||
| clear(void) | ||||
| { | ||||
|    contour_cnt = 0; | ||||
|    contours[0].point_cnt = 0; | ||||
|    triangle_cnt = 0; | ||||
|  | ||||
|    glutMouseFunc( mouse_clicked ); | ||||
|  | ||||
|    glutMouseFunc(mouse_clicked); | ||||
|    mode = DEFINE; | ||||
|  | ||||
|    glDeleteLists( list_start, 2 ); | ||||
|    list_start = 0; | ||||
|    display(); | ||||
| } | ||||
|  | ||||
| void quit( void ) | ||||
|  | ||||
| static void | ||||
| quit(void) | ||||
| { | ||||
|    exit( 0 ); | ||||
|    exit(0); | ||||
| } | ||||
|  | ||||
| void menu_selected( int entry ) | ||||
|  | ||||
| static void | ||||
| menu_selected(int entry) | ||||
| { | ||||
|    switch ( entry ) | ||||
|    { | ||||
|    switch (entry) { | ||||
|    case CLEAR: | ||||
|       clear(); | ||||
|       break; | ||||
| @@ -460,99 +336,87 @@ void menu_selected( int entry ) | ||||
|       quit(); | ||||
|       break; | ||||
|    } | ||||
|  | ||||
|    glutPostRedisplay(); | ||||
| } | ||||
|  | ||||
| void key_pressed( unsigned char key, int x, int y ) | ||||
| { | ||||
|    (void) x; | ||||
|    (void) y; | ||||
|  | ||||
|    switch ( key ) | ||||
|    { | ||||
|    case 'c': | ||||
|    case 'C': | ||||
|       clear(); | ||||
|       break; | ||||
| static void | ||||
| key_pressed(unsigned char key, int x, int y) | ||||
| { | ||||
|    switch (key) { | ||||
|    case 't': | ||||
|    case 'T': | ||||
|       tesse(); | ||||
|       glFinish(); | ||||
|       break; | ||||
|    case 'q': | ||||
|    case 'Q': | ||||
|       quit(); | ||||
|       break; | ||||
|    case 'c': | ||||
|    case 'C': | ||||
|       clear(); | ||||
|       break; | ||||
|    } | ||||
|  | ||||
|    glutPostRedisplay(); | ||||
| } | ||||
|  | ||||
| void myinit( void ) | ||||
|  | ||||
| static void | ||||
| myinit(void) | ||||
| { | ||||
|    /* clear background to gray */ | ||||
|    glClearColor( 0.4, 0.4, 0.4, 0.0 ); | ||||
|    glShadeModel( GL_FLAT ); | ||||
|    glPolygonMode( GL_FRONT, GL_FILL ); | ||||
|  | ||||
|    menu = glutCreateMenu( menu_selected ); | ||||
|  | ||||
|    glutAddMenuEntry( "clear", CLEAR ); | ||||
|    glutAddMenuEntry( "tesselate", TESSELATE ); | ||||
|    glutAddMenuEntry( "quit", QUIT ); | ||||
|  | ||||
|    glutAttachMenu( GLUT_RIGHT_BUTTON ); | ||||
|  | ||||
|    glutMouseFunc( mouse_clicked ); | ||||
|    glutKeyboardFunc( key_pressed ); | ||||
| /*  clear background to gray	*/ | ||||
|    glClearColor(0.4, 0.4, 0.4, 0.0); | ||||
|    glShadeModel(GL_FLAT); | ||||
|  | ||||
|    menu = glutCreateMenu(menu_selected); | ||||
|    glutAddMenuEntry("clear", CLEAR); | ||||
|    glutAddMenuEntry("tesselate", TESSELATE); | ||||
|    glutAddMenuEntry("quit", QUIT); | ||||
|    glutAttachMenu(GLUT_RIGHT_BUTTON); | ||||
|    glutMouseFunc(mouse_clicked); | ||||
|    glutKeyboardFunc(key_pressed); | ||||
|    contour_cnt = 0; | ||||
|    glPolygonMode(GL_FRONT, GL_FILL); | ||||
|    mode = DEFINE; | ||||
| } | ||||
|  | ||||
| static void reshape( GLsizei w, GLsizei h ) | ||||
|  | ||||
| static void | ||||
| reshape(GLsizei w, GLsizei h) | ||||
| { | ||||
|    glViewport( 0, 0, w, h ); | ||||
|  | ||||
|    glMatrixMode( GL_PROJECTION ); | ||||
|    glViewport(0, 0, w, h); | ||||
|    glMatrixMode(GL_PROJECTION); | ||||
|    glLoadIdentity(); | ||||
|    glOrtho( 0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0 ); | ||||
|  | ||||
|    glMatrixMode( GL_MODELVIEW ); | ||||
|    glOrtho(0.0, (GLdouble) w, 0.0, (GLdouble) h, -1.0, 1.0); | ||||
|    glMatrixMode(GL_MODELVIEW); | ||||
|    glLoadIdentity(); | ||||
|  | ||||
|    set_screen_wh( w, h ); | ||||
|    set_screen_wh(w, h); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void usage( void ) | ||||
| static void | ||||
| usage(void) | ||||
| { | ||||
|    printf( "Use left mouse button to place vertices.\n" ); | ||||
|    printf( "Press middle mouse button when done.\n" ); | ||||
|    printf( "Select tesselate from the pop-up menu.\n" ); | ||||
|    printf("Use left mouse button to place vertices.\n"); | ||||
|    printf("Press middle mouse button when done.\n"); | ||||
|    printf("Select tesselate from the pop-up menu.\n"); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Main Loop | ||||
|  * Open window with initial window size, title bar, | ||||
|  * RGBA display mode, and handle input events. | ||||
| /*  Main Loop | ||||
|  *  Open window with initial window size, title bar,  | ||||
|  *  RGBA display mode, and handle input events. | ||||
|  */ | ||||
| int main( int argc, char **argv ) | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| { | ||||
|     usage(); | ||||
|  | ||||
|     glutInit( &argc, argv ); | ||||
|     glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB ); | ||||
|     glutInitWindowSize( 400, 400 ); | ||||
|     glutCreateWindow( argv[0] ); | ||||
|  | ||||
|     myinit(); | ||||
|  | ||||
|     glutDisplayFunc( display ); | ||||
|     glutReshapeFunc( reshape ); | ||||
|  | ||||
|     glutMainLoop(); | ||||
|  | ||||
|     return 0; | ||||
|    usage(); | ||||
|    glutInit(&argc, argv); | ||||
|    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); | ||||
|    glutInitWindowSize(400, 400); | ||||
|    glutCreateWindow(argv[0]); | ||||
|    myinit(); | ||||
|    glutDisplayFunc(display); | ||||
|    glutReshapeFunc(reshape); | ||||
|    glutMainLoop(); | ||||
|    return 0; | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: texobj.c,v 1.1 1999/08/19 00:55:40 jtg Exp $ */ | ||||
| /* $Id: texobj.c,v 1.1.1.1.2.2 2000/03/01 03:36:35 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Example of using the 1.1 texture object functions. | ||||
| @@ -10,8 +10,14 @@ | ||||
|  | ||||
| /* | ||||
|  * $Log: texobj.c,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:40  jtg | ||||
|  * Initial revision | ||||
|  * Revision 1.1.1.1.2.2  2000/03/01 03:36:35  brianp | ||||
|  * test for GL 1.2 | ||||
|  * | ||||
|  * Revision 1.1.1.1.2.1  2000/02/25 23:24:28  brianp | ||||
|  * fixed bug when using display lists | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:40  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 3.1  1999/03/28 18:24:37  brianp | ||||
|  * minor clean-up | ||||
| @@ -34,7 +40,7 @@ static GLfloat Angle = 0.0f; | ||||
| static GLboolean HaveTexObj = GL_FALSE; | ||||
|  | ||||
|  | ||||
| #if defined(GL_VERSION_1_1) | ||||
| #if defined(GL_VERSION_1_1) || defined(GL_VERSION_1_2) | ||||
| #  define TEXTURE_OBJECT 1 | ||||
| #elif defined(GL_EXT_texture_object) | ||||
| #  define TEXTURE_OBJECT 1 | ||||
| @@ -84,7 +90,7 @@ static void draw( void ) | ||||
| #endif | ||||
|    } | ||||
|    else { | ||||
|       glCallList( TexObj[0] ); | ||||
|       glCallList( TexObj[1] ); | ||||
|    } | ||||
|    glBegin( GL_POLYGON ); | ||||
|    glTexCoord2f( 0.0, 0.0 );   glVertex2f( -1.0, -1.0 ); | ||||
| @@ -272,7 +278,8 @@ int main( int argc, char *argv[] ) | ||||
|       char *exten = (char *) glGetString( GL_EXTENSIONS ); | ||||
|       char *version = (char *) glGetString( GL_VERSION ); | ||||
|       if (   strstr( exten, "GL_EXT_texture_object" ) | ||||
|           || strncmp( version, "1.1", 3 )==0 ) { | ||||
|           || strncmp( version, "1.1", 3 )==0 | ||||
|           || strncmp( version, "1.2", 3 )==0 ) { | ||||
|          HaveTexObj = GL_TRUE; | ||||
|       } | ||||
|    } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: logo.c,v 1.1 1999/08/19 00:55:41 jtg Exp $ */ | ||||
| /* $Id: logo.c,v 1.1.1.1.2.1 1999/12/15 13:01:44 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. | ||||
| @@ -108,16 +108,16 @@ GLubyte *image = checkImage; | ||||
| GLint imageHeight = CHECKIMAGEHEIGHT; | ||||
| GLint imageWidth = CHECKIMAGEWIDTH; | ||||
|  | ||||
| float decal[] = { | ||||
| static float decal[] = { | ||||
|     GL_DECAL, | ||||
| }; | ||||
| float modulate[] = { | ||||
| static float modulate[] = { | ||||
|     GL_MODULATE, | ||||
| }; | ||||
| float repeat[] = { | ||||
| static float repeat[] = { | ||||
|     GL_REPEAT, | ||||
| }; | ||||
| float nearest[] = { | ||||
| static float nearest[] = { | ||||
|     GL_NEAREST, | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| # $Id: Makefile.X11,v 1.4 1999/11/05 08:01:17 brianp Exp $ | ||||
| # $Id: Makefile.X11,v 1.4.2.1 1999/11/12 15:43:25 brianp Exp $ | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.1 | ||||
| @@ -16,7 +16,7 @@ GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL $(XLIBS) | ||||
|  | ||||
| LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB) | ||||
|  | ||||
| PROGS = glxdemo glxpixmap offset xdemo glxinfo xfont | ||||
| PROGS = glxdemo glxpixmap offset xdemo glxinfo xfont glxdpyinfo | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										1095
									
								
								progs/xdemos/glxdpyinfo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1095
									
								
								progs/xdemos/glxdpyinfo.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,57 +1,153 @@ | ||||
| /* $Id: glxinfo.c,v 1.1 1999/09/16 16:40:46 brianp Exp $ */ | ||||
|  | ||||
| /* $Id: glxinfo.c,v 1.1.2.1 2000/07/19 15:15:40 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Query GLX extensions, version, vendor, etc. | ||||
|  * This program is in the public domain. | ||||
|  * brian_paul@mesa3d.org | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  *  | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  *  | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * This program is a work-alike of the IRIX glxinfo program. | ||||
|  * Command line options: | ||||
|  *  -t                     print wide table | ||||
|  *  -v                     print verbose information | ||||
|  *  -display DisplayName   specify the X display to interogate | ||||
|  * | ||||
|  * Brian Paul  26 January 2000 | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include <X11/Xlib.h> | ||||
| #include <X11/Xutil.h> | ||||
| #include <GL/gl.h> | ||||
| #include <GL/glx.h> | ||||
| #include <GL/glu.h> | ||||
| #include <GL/glx.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
|  | ||||
|  | ||||
| static void | ||||
| query_glx( Display *dpy, int scr ) | ||||
| typedef enum | ||||
| { | ||||
|    printf("GL_VERSION: %s\n", (char *) glGetString(GL_VERSION)); | ||||
|    printf("GL_EXTENSIONS: %s\n", (char *) glGetString(GL_EXTENSIONS)); | ||||
|    printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER)); | ||||
|    printf("GL_VENDOR: %s\n", (char *) glGetString(GL_VENDOR)); | ||||
|    printf("GLU_VERSION: %s\n", (char *) gluGetString(GLU_VERSION)); | ||||
|    printf("GLU_EXTENSIONS: %s\n", (char *) gluGetString(GLU_EXTENSIONS)); | ||||
|    Normal, | ||||
|    Wide, | ||||
|    Verbose | ||||
| } InfoMode; | ||||
|  | ||||
|    printf("server GLX_VENDOR: %s\n", (char *) glXQueryServerString( dpy, scr, GLX_VENDOR)); | ||||
|    printf("server GLX_VERSION: %s\n", (char *) glXQueryServerString( dpy, scr, GLX_VERSION)); | ||||
|    printf("server GLX_EXTENSIONS: %s\n", (char *) glXQueryServerString( dpy, scr, GLX_EXTENSIONS)); | ||||
|  | ||||
|    printf("client GLX_VENDOR: %s\n", (char *) glXGetClientString( dpy, GLX_VENDOR)); | ||||
|    printf("client GLX_VERSION: %s\n", (char *) glXGetClientString( dpy, GLX_VERSION)); | ||||
|    printf("client GLX_EXTENSIONS: %s\n", (char *) glXGetClientString( dpy, GLX_EXTENSIONS)); | ||||
| struct visual_attribs | ||||
| { | ||||
|    /* X visual attribs */ | ||||
|    int id; | ||||
|    int klass; | ||||
|    int depth; | ||||
|    int redMask, greenMask, blueMask; | ||||
|    int colormapSize; | ||||
|    int bitsPerRGB; | ||||
|  | ||||
|    printf("GLX extensions: %s\n", (char *) glXQueryExtensionsString(dpy, scr)); | ||||
|    /* GL visual attribs */ | ||||
|    int supportsGL; | ||||
|    int transparent; | ||||
|    int bufferSize; | ||||
|    int level; | ||||
|    int rgba; | ||||
|    int doubleBuffer; | ||||
|    int stereo; | ||||
|    int auxBuffers; | ||||
|    int redSize, greenSize, blueSize, alphaSize; | ||||
|    int depthSize; | ||||
|    int stencilSize; | ||||
|    int accumRedSize, accumGreenSize, accumBlueSize, accumAlphaSize; | ||||
|    int numSamples, numMultisample; | ||||
|    int visualCaveat; | ||||
| }; | ||||
|  | ||||
|     | ||||
| /* | ||||
|  * Print a list of extensions, with word-wrapping. | ||||
|  */ | ||||
| static void | ||||
| print_extension_list(const char *ext) | ||||
| { | ||||
|    const char *indentString = "    "; | ||||
|    const int indent = 4; | ||||
|    const int max = 79; | ||||
|    int width, i, j; | ||||
|  | ||||
|    if (!ext || !ext[0]) | ||||
|       return; | ||||
|  | ||||
|    width = indent; | ||||
|    printf(indentString); | ||||
|    i = j = 0; | ||||
|    while (1) { | ||||
|       if (ext[j] == ' ' || ext[j] == 0) { | ||||
|          /* found end of an extension name */ | ||||
|          const int len = j - i; | ||||
|          if (width + len > max) { | ||||
|             /* start a new line */ | ||||
|             printf("\n"); | ||||
|             width = indent; | ||||
|             printf(indentString); | ||||
|          } | ||||
|          /* print the extension name between ext[i] and ext[j] */ | ||||
|          while (i < j) { | ||||
|             printf("%c", ext[i]); | ||||
|             i++; | ||||
|          } | ||||
|          /* either we're all done, or we'll continue with next extension */ | ||||
|          width += len + 1; | ||||
|          if (ext[j] == 0) { | ||||
|             break; | ||||
|          } | ||||
|          else { | ||||
|             i++; | ||||
|             j++; | ||||
|             if (ext[j] == 0) | ||||
|                break; | ||||
|             printf(", "); | ||||
|             width += 2; | ||||
|          } | ||||
|       } | ||||
|       j++; | ||||
|    } | ||||
|    printf("\n"); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| int | ||||
| main( int argc, char *argv[] ) | ||||
| static void | ||||
| print_screen_info(Display *dpy, int scrnum) | ||||
| { | ||||
|    Display *dpy; | ||||
|    Window win; | ||||
|    int attrib[] = { GLX_RGBA, | ||||
| 		    GLX_RED_SIZE, 1, | ||||
| 		    GLX_GREEN_SIZE, 1, | ||||
| 		    GLX_BLUE_SIZE, 1, | ||||
| 		    None }; | ||||
|    int scrnum; | ||||
|    int attribSingle[] = { | ||||
|       GLX_RGBA, | ||||
|       GLX_RED_SIZE, 1, | ||||
|       GLX_GREEN_SIZE, 1, | ||||
|       GLX_BLUE_SIZE, 1, | ||||
|       None }; | ||||
|    int attribDouble[] = { | ||||
|       GLX_RGBA, | ||||
|       GLX_RED_SIZE, 1, | ||||
|       GLX_GREEN_SIZE, 1, | ||||
|       GLX_BLUE_SIZE, 1, | ||||
|       GLX_DOUBLEBUFFER, | ||||
|       None }; | ||||
|  | ||||
|    XSetWindowAttributes attr; | ||||
|    unsigned long mask; | ||||
|    Window root; | ||||
| @@ -59,40 +155,377 @@ main( int argc, char *argv[] ) | ||||
|    XVisualInfo *visinfo; | ||||
|    int width = 100, height = 100; | ||||
|  | ||||
|    dpy = XOpenDisplay(NULL); | ||||
|    if (!dpy) { | ||||
|       fprintf(stderr, "Unable to open default display!\n"); | ||||
|       return 1; | ||||
|    } | ||||
|    root = RootWindow(dpy, scrnum); | ||||
|  | ||||
|    scrnum = DefaultScreen( dpy ); | ||||
|    root = RootWindow( dpy, scrnum ); | ||||
|  | ||||
|    visinfo = glXChooseVisual( dpy, scrnum, attrib ); | ||||
|    visinfo = glXChooseVisual(dpy, scrnum, attribSingle); | ||||
|    if (!visinfo) { | ||||
|       fprintf(stderr, "Error: couldn't find RGB GLX visual!\n"); | ||||
|       return 1; | ||||
|       visinfo = glXChooseVisual(dpy, scrnum, attribDouble); | ||||
|       if (!visinfo) { | ||||
|          fprintf(stderr, "Error: couldn't find RGB GLX visual\n"); | ||||
|          return; | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    /* window attributes */ | ||||
|    attr.background_pixel = 0; | ||||
|    attr.border_pixel = 0; | ||||
|    attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone); | ||||
|    attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone); | ||||
|    attr.event_mask = StructureNotifyMask | ExposureMask; | ||||
|    mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; | ||||
|  | ||||
|    win = XCreateWindow( dpy, root, 0, 0, width, height, | ||||
| 		        0, visinfo->depth, InputOutput, | ||||
| 		        visinfo->visual, mask, &attr ); | ||||
|    win = XCreateWindow(dpy, root, 0, 0, width, height, | ||||
| 		       0, visinfo->depth, InputOutput, | ||||
| 		       visinfo->visual, mask, &attr); | ||||
|  | ||||
|    ctx = glXCreateContext( dpy, visinfo, NULL, True ); | ||||
|    if (!ctx) { | ||||
|       fprintf(stderr, "Error: glXCreateContext failed\n"); | ||||
|       XDestroyWindow(dpy, win); | ||||
|       return; | ||||
|    } | ||||
|  | ||||
|    glXMakeCurrent( dpy, win, ctx ); | ||||
|  | ||||
|    query_glx(dpy, scrnum); | ||||
|    if (glXMakeCurrent(dpy, win, ctx)) { | ||||
|       const char *serverVendor = glXQueryServerString(dpy, scrnum, GLX_VENDOR); | ||||
|       const char *serverVersion = glXQueryServerString(dpy, scrnum, GLX_VERSION); | ||||
|       const char *serverExtensions = glXQueryServerString(dpy, scrnum, GLX_EXTENSIONS); | ||||
|       const char *clientVendor = glXGetClientString(dpy, GLX_VENDOR); | ||||
|       const char *clientVersion = glXGetClientString(dpy, GLX_VERSION); | ||||
|       const char *clientExtensions = glXGetClientString(dpy, GLX_EXTENSIONS); | ||||
|       const char *glxExtensions = glXQueryExtensionsString(dpy, scrnum); | ||||
|       const char *glVendor = (const char *) glGetString(GL_VENDOR); | ||||
|       const char *glRenderer = (const char *) glGetString(GL_RENDERER); | ||||
|       const char *glVersion = (const char *) glGetString(GL_VERSION); | ||||
|       const char *glExtensions = (const char *) glGetString(GL_EXTENSIONS); | ||||
|       const char *gluVersion = (const char *) gluGetString(GLU_VERSION); | ||||
|       const char *gluExtensions = (const char *) gluGetString(GLU_EXTENSIONS); | ||||
|       printf("display: %s  screen:%d\n", DisplayString(dpy), scrnum); | ||||
|       printf("direct rendering: %s\n", glXIsDirect(dpy, ctx) ? "Yes" : "No"); | ||||
|       printf("server glx vendor string: %s\n", serverVendor); | ||||
|       printf("server glx version string: %s\n", serverVersion); | ||||
|       printf("server glx extensions:\n"); | ||||
|       print_extension_list(serverExtensions); | ||||
|       printf("client glx vendor string: %s\n", clientVendor); | ||||
|       printf("client glx version string: %s\n", clientVersion); | ||||
|       printf("client glx extensions:\n"); | ||||
|       print_extension_list(clientExtensions); | ||||
|       printf("GLX extensions:\n"); | ||||
|       print_extension_list(glxExtensions); | ||||
|       printf("OpenGL vendor string: %s\n", glVendor); | ||||
|       printf("OpenGL renderer string: %s\n", glRenderer); | ||||
|       printf("OpenGL version string: %s\n", glVersion); | ||||
|       printf("OpenGL extensions:\n"); | ||||
|       print_extension_list(glExtensions); | ||||
|       printf("glu version: %s\n", gluVersion); | ||||
|       printf("glu extensions:\n"); | ||||
|       print_extension_list(gluExtensions); | ||||
|    } | ||||
|    else { | ||||
|       fprintf(stderr, "Error: glXMakeCurrent failed\n"); | ||||
|    } | ||||
|  | ||||
|    glXDestroyContext(dpy, ctx); | ||||
|    XDestroyWindow(dpy, win); | ||||
| } | ||||
|  | ||||
|  | ||||
| static const char * | ||||
| visual_class_name(int cls) | ||||
| { | ||||
|    switch (cls) { | ||||
|       case StaticColor: | ||||
|          return "StaticColor"; | ||||
|       case PseudoColor: | ||||
|          return "PseudoColor"; | ||||
|       case StaticGray: | ||||
|          return "StaticGray"; | ||||
|       case GrayScale: | ||||
|          return "GrayScale"; | ||||
|       case TrueColor: | ||||
|          return "TrueColor"; | ||||
|       case DirectColor: | ||||
|          return "DirectColor"; | ||||
|       default: | ||||
|          return ""; | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| static const char * | ||||
| visual_class_abbrev(int cls) | ||||
| { | ||||
|    switch (cls) { | ||||
|       case StaticColor: | ||||
|          return "sc"; | ||||
|       case PseudoColor: | ||||
|          return "pc"; | ||||
|       case StaticGray: | ||||
|          return "sg"; | ||||
|       case GrayScale: | ||||
|          return "gs"; | ||||
|       case TrueColor: | ||||
|          return "tc"; | ||||
|       case DirectColor: | ||||
|          return "dc"; | ||||
|       default: | ||||
|          return ""; | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| get_visual_attribs(Display *dpy, XVisualInfo *vInfo, | ||||
|                    struct visual_attribs *attribs) | ||||
| { | ||||
|    const char *ext = glXQueryExtensionsString(dpy, vInfo->screen); | ||||
|  | ||||
|    memset(attribs, 0, sizeof(struct visual_attribs)); | ||||
|  | ||||
|    attribs->id = vInfo->visualid; | ||||
| #if defined(__cplusplus) || defined(c_plusplus) | ||||
|    attribs->klass = vInfo->c_class; | ||||
| #else | ||||
|    attribs->klass = vInfo->class; | ||||
| #endif | ||||
|    attribs->depth = vInfo->depth; | ||||
|    attribs->redMask = vInfo->red_mask; | ||||
|    attribs->greenMask = vInfo->green_mask; | ||||
|    attribs->blueMask = vInfo->blue_mask; | ||||
|    attribs->colormapSize = vInfo->colormap_size; | ||||
|    attribs->bitsPerRGB = vInfo->bits_per_rgb; | ||||
|  | ||||
|    if (glXGetConfig(dpy, vInfo, GLX_USE_GL, &attribs->supportsGL) != 0) | ||||
|       return; | ||||
|    glXGetConfig(dpy, vInfo, GLX_BUFFER_SIZE, &attribs->bufferSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_LEVEL, &attribs->level); | ||||
|    glXGetConfig(dpy, vInfo, GLX_RGBA, &attribs->rgba); | ||||
|    glXGetConfig(dpy, vInfo, GLX_DOUBLEBUFFER, &attribs->doubleBuffer); | ||||
|    glXGetConfig(dpy, vInfo, GLX_STEREO, &attribs->stereo); | ||||
|    glXGetConfig(dpy, vInfo, GLX_AUX_BUFFERS, &attribs->auxBuffers); | ||||
|    glXGetConfig(dpy, vInfo, GLX_RED_SIZE, &attribs->redSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_GREEN_SIZE, &attribs->greenSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_BLUE_SIZE, &attribs->blueSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_ALPHA_SIZE, &attribs->alphaSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_DEPTH_SIZE, &attribs->depthSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_STENCIL_SIZE, &attribs->stencilSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_ACCUM_RED_SIZE, &attribs->accumRedSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_ACCUM_GREEN_SIZE, &attribs->accumGreenSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_ACCUM_BLUE_SIZE, &attribs->accumBlueSize); | ||||
|    glXGetConfig(dpy, vInfo, GLX_ACCUM_ALPHA_SIZE, &attribs->accumAlphaSize); | ||||
|  | ||||
|    /* transparent pixel value not implemented yet */ | ||||
|    attribs->transparent = 0; | ||||
|  | ||||
|    /* multisample tests not implemented yet */ | ||||
|    attribs->numSamples = 0; | ||||
|    attribs->numMultisample = 0; | ||||
|  | ||||
| #if defined(GLX_EXT_visual_rating) | ||||
|    if (ext && strstr(ext, "GLX_EXT_visual_rating")) { | ||||
|       glXGetConfig(dpy, vInfo, GLX_VISUAL_CAVEAT_EXT, &attribs->visualCaveat); | ||||
|    } | ||||
|    else { | ||||
|       attribs->visualCaveat = GLX_NONE_EXT; | ||||
|    } | ||||
| #else | ||||
|    attribs->visualCaveat = 0; | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| print_visual_attribs_verbose(const struct visual_attribs *attribs) | ||||
| { | ||||
|    printf("Visual ID: %x  depth=%d  class=%s\n", | ||||
|           attribs->id, attribs->depth, visual_class_name(attribs->klass)); | ||||
|    printf("    bufferSize=%d level=%d renderType=%s doubleBuffer=%d stereo=%d\n", | ||||
|           attribs->bufferSize, attribs->level, attribs->rgba ? "rgba" : "ci", | ||||
|           attribs->doubleBuffer, attribs->stereo); | ||||
|    printf("    rgba: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", | ||||
|           attribs->redSize, attribs->greenSize, | ||||
|           attribs->blueSize, attribs->alphaSize); | ||||
|    printf("    auxBuffers=%d depthSize=%d stencilSize=%d\n", | ||||
|           attribs->auxBuffers, attribs->depthSize, attribs->stencilSize); | ||||
|    printf("    accum: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", | ||||
|           attribs->accumRedSize, attribs->accumGreenSize, | ||||
|           attribs->accumBlueSize, attribs->accumAlphaSize); | ||||
|    printf("    multiSample=%d  multiSampleBuffers=%d\n", | ||||
|           attribs->numSamples, attribs->numMultisample); | ||||
| #ifdef GLX_EXT_visual_rating | ||||
|    if (attribs->visualCaveat == GLX_NONE_EXT || attribs->visualCaveat == 0) | ||||
|       printf("    visualCaveat=None\n"); | ||||
|    else if (attribs->visualCaveat == GLX_SLOW_VISUAL_EXT) | ||||
|       printf("    visualCaveat=Slow\n"); | ||||
|    else if (attribs->visualCaveat == GLX_NON_CONFORMANT_VISUAL_EXT) | ||||
|       printf("    visualCaveat=Nonconformant\n"); | ||||
| #endif | ||||
|    printf("    %s\n", attribs->transparent ? "Transparent." : "Opaque."); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| print_visual_attribs_short_header(void) | ||||
| { | ||||
|  printf("   visual  x  bf lv rg d st colorbuffer ax dp st accumbuffer  ms  cav\n"); | ||||
|  printf(" id dep cl sp sz l  ci b ro  r  g  b  a bf th cl  r  g  b  a ns b eat\n"); | ||||
|  printf("----------------------------------------------------------------------\n"); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| print_visual_attribs_short(const struct visual_attribs *attribs) | ||||
| { | ||||
|    char *caveat; | ||||
| #ifdef GLX_EXT_visual_rating | ||||
|    if (attribs->visualCaveat == GLX_NONE_EXT || attribs->visualCaveat == 0) | ||||
|       caveat = "None"; | ||||
|    else if (attribs->visualCaveat == GLX_SLOW_VISUAL_EXT) | ||||
|       caveat = "Slow"; | ||||
|    else if (attribs->visualCaveat == GLX_NON_CONFORMANT_VISUAL_EXT) | ||||
|       caveat = "Ncon"; | ||||
| #else | ||||
|    caveat = "None"; | ||||
| #endif  | ||||
|  | ||||
|    printf("0x%2x %2d %2s %2d %2d %2d %1s %2s %2s %2d %2d %2d %2d %2d %2d %2d", | ||||
|           attribs->id, | ||||
|           attribs->depth, | ||||
|           visual_class_abbrev(attribs->klass), | ||||
|           attribs->transparent, | ||||
|           attribs->bufferSize, | ||||
|           attribs->level, | ||||
|           attribs->rgba ? "r" : "c", | ||||
|           attribs->doubleBuffer ? "y" : ".", | ||||
|           attribs->stereo ? "y" : ".", | ||||
|           attribs->redSize, attribs->greenSize, | ||||
|           attribs->blueSize, attribs->alphaSize, | ||||
|           attribs->auxBuffers, | ||||
|           attribs->depthSize, | ||||
|           attribs->stencilSize | ||||
|           ); | ||||
|  | ||||
|    printf(" %2d %2d %2d %2d %2d %1d %s\n", | ||||
|           attribs->accumRedSize, attribs->accumGreenSize, | ||||
|           attribs->accumBlueSize, attribs->accumAlphaSize, | ||||
|           attribs->numSamples, attribs->numMultisample, | ||||
|           caveat | ||||
|           ); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| print_visual_attribs_long_header(void) | ||||
| { | ||||
|  printf("Vis  Vis   Visual Trans  buff lev render DB ste  r   g   b   a  aux dep ste  accum buffers  MS   MS\n"); | ||||
|  printf(" ID Depth   Type  parent size el   type     reo sz  sz  sz  sz  buf th  ncl  r   g   b   a  num bufs\n"); | ||||
|  printf("----------------------------------------------------------------------------------------------------\n"); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| print_visual_attribs_long(const struct visual_attribs *attribs) | ||||
| { | ||||
|    printf("0x%2x %2d %-11s %2d     %2d %2d  %4s %3d %3d %3d %3d %3d %3d", | ||||
|           attribs->id, | ||||
|           attribs->depth, | ||||
|           visual_class_name(attribs->klass), | ||||
|           attribs->transparent, | ||||
|           attribs->bufferSize, | ||||
|           attribs->level, | ||||
|           attribs->rgba ? "rgba" : "ci  ", | ||||
|           attribs->doubleBuffer, | ||||
|           attribs->stereo, | ||||
|           attribs->redSize, attribs->greenSize, | ||||
|           attribs->blueSize, attribs->alphaSize | ||||
|           ); | ||||
|  | ||||
|    printf(" %3d %4d %2d %3d %3d %3d %3d  %2d  %2d\n", | ||||
|           attribs->auxBuffers, | ||||
|           attribs->depthSize, | ||||
|           attribs->stencilSize, | ||||
|           attribs->accumRedSize, attribs->accumGreenSize, | ||||
|           attribs->accumBlueSize, attribs->accumAlphaSize, | ||||
|           attribs->numSamples, attribs->numMultisample | ||||
|           ); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| print_visual_info(Display *dpy, int scrnum, InfoMode mode) | ||||
| { | ||||
|    XVisualInfo template; | ||||
|    XVisualInfo *visuals; | ||||
|    int numVisuals; | ||||
|    long mask; | ||||
|    int i; | ||||
|  | ||||
|    /* get list of all visuals on this screen */ | ||||
|    template.screen = scrnum; | ||||
|    mask = VisualScreenMask; | ||||
|    visuals = XGetVisualInfo(dpy, mask, &template, &numVisuals); | ||||
|  | ||||
|    if (mode == Verbose) { | ||||
|       for (i = 0; i < numVisuals; i++) { | ||||
|          struct visual_attribs attribs; | ||||
|          get_visual_attribs(dpy, &visuals[i], &attribs); | ||||
|          print_visual_attribs_verbose(&attribs); | ||||
|       } | ||||
|    } | ||||
|    else if (mode == Normal) { | ||||
|       print_visual_attribs_short_header(); | ||||
|       for (i = 0; i < numVisuals; i++) { | ||||
|          struct visual_attribs attribs; | ||||
|          get_visual_attribs(dpy, &visuals[i], &attribs); | ||||
|          print_visual_attribs_short(&attribs); | ||||
|       } | ||||
|    } | ||||
|    else if (mode == Wide) { | ||||
|       print_visual_attribs_long_header(); | ||||
|       for (i = 0; i < numVisuals; i++) { | ||||
|          struct visual_attribs attribs; | ||||
|          get_visual_attribs(dpy, &visuals[i], &attribs); | ||||
|          print_visual_attribs_long(&attribs); | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    XFree(visuals); | ||||
| } | ||||
|  | ||||
|  | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|    char *displayName = ":0"; | ||||
|    Display *dpy; | ||||
|    int numScreens, scrnum; | ||||
|    InfoMode mode = Normal; | ||||
|    int i; | ||||
|  | ||||
|    for (i = 1; i < argc; i++) { | ||||
|       if (strcmp(argv[i], "-display") == 0 && i + 1 < argc) { | ||||
|          displayName = argv[i + 1]; | ||||
|          i++; | ||||
|       } | ||||
|       else if (strcmp(argv[i], "-t") == 0) { | ||||
|          mode = Wide; | ||||
|       } | ||||
|       else if (strcmp(argv[i], "-v") == 0) { | ||||
|          mode = Verbose; | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    dpy = XOpenDisplay(displayName); | ||||
|    if (!dpy) { | ||||
|       fprintf(stderr, "Error: unable to open display %s\n", displayName); | ||||
|       return -1; | ||||
|    } | ||||
|  | ||||
|    numScreens = ScreenCount(dpy); | ||||
|    for (scrnum = 0; scrnum < numScreens; scrnum++) { | ||||
|       print_screen_info(dpy, scrnum); | ||||
|       printf("\n"); | ||||
|       print_visual_info(dpy, scrnum, mode); | ||||
|       if (scrnum + 1 < numScreens) | ||||
|          printf("\n\n"); | ||||
|    } | ||||
|  | ||||
|    XCloseDisplay(dpy); | ||||
|  | ||||
|    return 0; | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
| # Tinic Uro <5uro@informatik.uni-hamburg.de> | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  2.6 | ||||
| # Copyright (C) 1995-1997  Brian Paul | ||||
| # Version:  3.2.1 | ||||
| # Copyright (C) 1995-2000  Brian Paul | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Library General Public | ||||
| @@ -29,8 +29,7 @@ INCDIR = ../include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | ||||
| 	project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \ | ||||
| 	tess_winding.c | ||||
| 	polytest.c project.c quadric.c tess.c tesselat.c | ||||
|  | ||||
| OBJECTS = $(SOURCES:.c=.o) | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| # Makefile for GLU for BeOS R4 | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.1 | ||||
| # Copyright (C) 1995-1999  Brian Paul | ||||
| # Version:  3.2.1 | ||||
| # Copyright (C) 1995-2000  Brian Paul | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Library General Public | ||||
| @@ -19,37 +19,11 @@ | ||||
| # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  | ||||
|  | ||||
| # $Id: Makefile.BeOS-R4,v 1.5 1999/10/03 00:53:38 gareth Exp $ | ||||
|  | ||||
| # $Log: Makefile.BeOS-R4,v $ | ||||
| # Revision 1.5  1999/10/03 00:53:38  gareth | ||||
| # Added tessellation winding rule files. | ||||
| # | ||||
| # Revision 1.4  1999/09/17 00:06:57  brianp | ||||
| # version symbol changes | ||||
| # | ||||
| # Revision 1.3  1999/09/15 15:11:01  brianp | ||||
| # added third, tiny version number to mklib scripts | ||||
| # | ||||
| # Revision 1.2  1999/09/10 02:03:31  gareth | ||||
| # Added GLU 1.3 tessellation (except winding rule code). | ||||
| # | ||||
| # Revision 1.1.1.1  1999/08/19 00:55:42  jtg | ||||
| # Imported sources | ||||
| # | ||||
| # Revision 1.2  1999/02/02 04:44:40  brianp | ||||
| # fixed some problems | ||||
| # | ||||
| # Revision 1.1  1999/01/19 04:10:02  brianp | ||||
| # Initial revision | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### MACROS ##### | ||||
|  | ||||
| GLU_MAJOR = 1 | ||||
| GLU_MINOR = 2 | ||||
| GLU_MINOR = 1 | ||||
| GLU_TINY = $(MESA_MAJOR)$(MESA_MINOR)$(MESA_TINY) | ||||
|  | ||||
| VPATH = RCS | ||||
| @@ -58,8 +32,7 @@ INCDIR = ../include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | ||||
| 	project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \ | ||||
| 	tess_winding.c | ||||
| 	polytest.c project.c quadric.c tess.c tesselat.c | ||||
|  | ||||
| OBJECTS = $(SOURCES:.c=.o) | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| # $Id: Makefile.X11,v 1.6 1999/10/03 00:53:38 gareth Exp $ | ||||
| # $Id: Makefile.X11,v 1.6.2.3 2000/07/11 03:48:23 brianp Exp $ | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.1 | ||||
| # Copyright (C) 1995-1999  Brian Paul | ||||
| # Version:  3.2.1 | ||||
| # Copyright (C) 1995-2000  Brian Paul | ||||
|  | ||||
| # Makefile for GLU library | ||||
|  | ||||
| @@ -10,7 +10,7 @@ | ||||
| ##### MACROS ##### | ||||
|  | ||||
| GLU_MAJOR = 1 | ||||
| GLU_MINOR = 2 | ||||
| GLU_MINOR = 1 | ||||
| GLU_TINY = 0$(MESA_MAJOR)0$(MESA_MINOR)0$(MESA_TINY) | ||||
|  | ||||
| VPATH = RCS | ||||
| @@ -19,8 +19,7 @@ INCDIR = ../include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | ||||
| 	project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \ | ||||
| 	tess_winding.c | ||||
| 	polytest.c project.c quadric.c tess.c tesselat.c | ||||
|  | ||||
| OBJECTS = $(SOURCES:.c=.o) | ||||
|  | ||||
|   | ||||
							
								
								
									
										63
									
								
								src/glu/mesa/Makefile.m32
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/glu/mesa/Makefile.m32
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| # Makefile for GLU for GCC-2.95.2/Mingw32 contributed by | ||||
| # Paul Garceau <pgarceau@teleport.com> | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.2.1 | ||||
| # Copyright (C) 1995-2000  Brian Paul | ||||
| # | ||||
| # This library is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU Library General Public | ||||
| # License as published by the Free Software Foundation; either | ||||
| # version 2 of the License, or (at your option) any later version. | ||||
| # | ||||
| # This library is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| # Library General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Library General Public | ||||
| # License along with this library; if not, write to the Free | ||||
| # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  | ||||
|  | ||||
| MESA_MAJOR=3 | ||||
| MESA_MINOR=2 | ||||
| MESA_TINY=1 | ||||
| VERSION=$(MESA_MAJOR).$(MESA_MINOR) | ||||
|  | ||||
| CFLAGS = -I. -DWIN32 -D__WIN32__ -D_WINDOWS \ | ||||
| 		-O2 -funroll-loops \ | ||||
| 		-fexpensive-optimizations -fomit-frame-pointer -ffast-math \ | ||||
| 		-malign-loops=2 -malign-jumps=2 -malign-functions=2 \ | ||||
| 		-mwindows | ||||
| CC = gcc | ||||
| MAKELIB = ar ru | ||||
| GLU_LIB = libGLU.a | ||||
|  | ||||
|  | ||||
| ##### MACROS ##### | ||||
|  | ||||
| VPATH = RCS | ||||
|  | ||||
| INCDIR = ../include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | ||||
| 	polytest.c project.c quadric.c tess.c tesselat.c | ||||
|  | ||||
| OBJECTS = $(SOURCES:.c=.o) | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### RULES ##### | ||||
|  | ||||
| .c.o: | ||||
| 	$(CC) -c -I$(INCDIR) $(CFLAGS) $< | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### TARGETS ##### | ||||
|  | ||||
| # Make the library: | ||||
| $(LIBDIR)/$(GLU_LIB): $(OBJECTS) | ||||
| 	$(MAKELIB) $(GLU_LIB) $(MAJOR) $(MINOR) $(TINY) $(OBJECTS) | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: all.h,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ | ||||
| /* $Id: all.h,v 1.1.1.1.2.1 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  2.3 | ||||
|  * Copyright (C) 1995-1997  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,20 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: all.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:42  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 1.2  1997/11/20 00:28:20  brianp | ||||
|  * changed PCH to PC_HEADER | ||||
|  * | ||||
|  * Revision 1.1  1997/05/28 02:29:14  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * This file includes all .h files needed for the GLU source code for | ||||
|  * the purpose of precompiled headers. | ||||
| @@ -50,10 +36,8 @@ | ||||
|  | ||||
|  | ||||
| #ifndef PC_HEADER | ||||
|   This is an error.  all.h should be included only if PCH is defined. | ||||
| This is an error.all.h should be included only if PCH is defined. | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #include <assert.h> | ||||
| #include <math.h> | ||||
| #include <stdio.h> | ||||
| @@ -64,6 +48,4 @@ | ||||
| #include "gluP.h" | ||||
| #include "nurbs.h" | ||||
| #include "tess.h" | ||||
|  | ||||
|  | ||||
| #endif /*GLU_ALL_H*/ | ||||
| #endif				/*GLU_ALL_H */ | ||||
|   | ||||
| @@ -16,11 +16,11 @@ CFLAGS = /include=$(INCDIR)/define=(FBIND=1) | ||||
|  | ||||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | ||||
| 	project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \ | ||||
| 	tess_winding.c | ||||
| 	tess_winding.c tess_clip.c | ||||
|  | ||||
| OBJECTS =glu.obj,mipmap.obj,nurbs.obj,nurbscrv.obj,nurbssrf.obj,nurbsutl.obj,\ | ||||
| 	project.obj,quadric.obj,tess.obj,tess_fist.obj,tess_hash.obj,\ | ||||
| 	tess_heap.obj,tess_winding.obj | ||||
| 	tess_heap.obj,tess_winding.obj,tess_clip.obj | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: glu.c,v 1.16 1999/10/27 09:47:41 brianp Exp $ */ | ||||
| /* $Id: glu.c,v 1.16.2.6 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Copyright (C) 1995-1999  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,99 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: glu.c,v $ | ||||
|  * Revision 1.16  1999/10/27 09:47:41  brianp | ||||
|  * disabled gluGetProcAddressEXT | ||||
|  * | ||||
|  * Revision 1.15  1999/09/19 02:03:19  tjump | ||||
|  * More Win32 build compliance fixups | ||||
|  * | ||||
|  * Revision 1.14  1999/09/17 12:21:53  brianp | ||||
|  * glGetProcAddressEXT changes to accomodate Win32 and non-Win32 | ||||
|  * | ||||
|  * Revision 1.13  1999/09/17 03:17:18  tjump | ||||
|  * Patch error fixup | ||||
|  * | ||||
|  * Revision 1.12  1999/09/17 03:07:28  tjump | ||||
|  * Win32 build req't updates | ||||
|  * | ||||
|  * Revision 1.11  1999/09/17 01:00:38  brianp | ||||
|  * fixed typo | ||||
|  * | ||||
|  * Revision 1.10  1999/09/17 00:06:14  brianp | ||||
|  * gluGetProcAddressEXT change for C++ / BeOS | ||||
|  * | ||||
|  * Revision 1.9  1999/09/16 22:37:56  brianp | ||||
|  * added some casts in gluGetProcAddressEXT() | ||||
|  * | ||||
|  * Revision 1.8  1999/09/16 16:53:28  brianp | ||||
|  * clean-up of GLU_EXT_get_proc_address | ||||
|  * | ||||
|  * Revision 1.7  1999/09/14 00:11:40  brianp | ||||
|  * added gluCheckExtension() | ||||
|  * | ||||
|  * Revision 1.6  1999/09/13 14:31:32  joukj | ||||
|  * | ||||
|  * strcmp needs the string.h | ||||
|  * | ||||
|  * Revision 1.5  1999/09/11 12:04:54  brianp | ||||
|  * added 1.2 function to gluGetProcAddressEXT() | ||||
|  * | ||||
|  * Revision 1.4  1999/09/11 11:36:26  brianp | ||||
|  * added GLU_EXT_get_proc_address | ||||
|  * | ||||
|  * Revision 1.3  1999/09/10 04:32:10  gareth | ||||
|  * Fixed triangle output, recovery process termination. | ||||
|  * | ||||
|  * Revision 1.2  1999/09/10 02:03:31  gareth | ||||
|  * Added GLU 1.3 tessellation (except winding rule code). | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:42  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 1.13  1999/03/31 19:07:28  brianp | ||||
|  * added GL_EXT_abgr to extensions | ||||
|  * | ||||
|  * Revision 1.12  1999/02/06 06:12:41  brianp | ||||
|  * updated version string to 3.1 | ||||
|  * | ||||
|  * Revision 1.11  1999/01/03 03:23:15  brianp | ||||
|  * now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump) | ||||
|  * | ||||
|  * Revision 1.10  1998/04/22 00:35:50  brianp | ||||
|  * changed version to 3.0 | ||||
|  * | ||||
|  * Revision 1.9  1997/12/09 03:03:32  brianp | ||||
|  * changed version to 2.6 | ||||
|  * | ||||
|  * Revision 1.8  1997/10/04 01:30:20  brianp | ||||
|  * changed version to 2.5 | ||||
|  * | ||||
|  * Revision 1.7  1997/08/13 01:25:21  brianp | ||||
|  * changed version string to 2.4 | ||||
|  * | ||||
|  * Revision 1.6  1997/07/24 01:28:44  brianp | ||||
|  * changed precompiled header symbol from PCH to PC_HEADER | ||||
|  * | ||||
|  * Revision 1.5  1997/07/13 22:59:11  brianp | ||||
|  * added const to viewport parameter of gluPickMatrix() | ||||
|  * | ||||
|  * Revision 1.4  1997/05/28 02:29:38  brianp | ||||
|  * added support for precompiled headers (PCH), inserted APIENTRY keyword | ||||
|  * | ||||
|  * Revision 1.3  1997/04/12 16:19:02  brianp | ||||
|  * changed version to 2.3 | ||||
|  * | ||||
|  * Revision 1.2  1997/03/11 00:58:34  brianp | ||||
|  * changed version to 2.2 | ||||
|  * | ||||
|  * Revision 1.1  1996/09/27 01:19:39  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifdef PC_HEADER | ||||
| #include "all.h" | ||||
| #else | ||||
| @@ -139,9 +46,10 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
| void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, | ||||
|                          GLdouble centerx, GLdouble centery, GLdouble centerz, | ||||
|                          GLdouble upx, GLdouble upy, GLdouble upz ) | ||||
| void GLAPIENTRY | ||||
| gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, | ||||
| 	  GLdouble centerx, GLdouble centery, GLdouble centerz, | ||||
| 	  GLdouble upx, GLdouble upy, GLdouble upz) | ||||
| { | ||||
|    GLdouble m[16]; | ||||
|    GLdouble x[3], y[3], z[3]; | ||||
| @@ -153,8 +61,8 @@ void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, | ||||
|    z[0] = eyex - centerx; | ||||
|    z[1] = eyey - centery; | ||||
|    z[2] = eyez - centerz; | ||||
|    mag = sqrt( z[0]*z[0] + z[1]*z[1] + z[2]*z[2] ); | ||||
|    if (mag) {  /* mpichler, 19950515 */ | ||||
|    mag = sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]); | ||||
|    if (mag) {			/* mpichler, 19950515 */ | ||||
|       z[0] /= mag; | ||||
|       z[1] /= mag; | ||||
|       z[2] /= mag; | ||||
| @@ -166,28 +74,28 @@ void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, | ||||
|    y[2] = upz; | ||||
|  | ||||
|    /* X vector = Y cross Z */ | ||||
|    x[0] =  y[1]*z[2] - y[2]*z[1]; | ||||
|    x[1] = -y[0]*z[2] + y[2]*z[0]; | ||||
|    x[2] =  y[0]*z[1] - y[1]*z[0]; | ||||
|    x[0] = y[1] * z[2] - y[2] * z[1]; | ||||
|    x[1] = -y[0] * z[2] + y[2] * z[0]; | ||||
|    x[2] = y[0] * z[1] - y[1] * z[0]; | ||||
|  | ||||
|    /* Recompute Y = Z cross X */ | ||||
|    y[0] =  z[1]*x[2] - z[2]*x[1]; | ||||
|    y[1] = -z[0]*x[2] + z[2]*x[0]; | ||||
|    y[2] =  z[0]*x[1] - z[1]*x[0]; | ||||
|    y[0] = z[1] * x[2] - z[2] * x[1]; | ||||
|    y[1] = -z[0] * x[2] + z[2] * x[0]; | ||||
|    y[2] = z[0] * x[1] - z[1] * x[0]; | ||||
|  | ||||
|    /* mpichler, 19950515 */ | ||||
|    /* cross product gives area of parallelogram, which is < 1.0 for | ||||
|     * non-perpendicular unit-length vectors; so normalize x, y here | ||||
|     */ | ||||
|  | ||||
|    mag = sqrt( x[0]*x[0] + x[1]*x[1] + x[2]*x[2] ); | ||||
|    mag = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]); | ||||
|    if (mag) { | ||||
|       x[0] /= mag; | ||||
|       x[1] /= mag; | ||||
|       x[2] /= mag; | ||||
|    } | ||||
|  | ||||
|    mag = sqrt( y[0]*y[0] + y[1]*y[1] + y[2]*y[2] ); | ||||
|    mag = sqrt(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]); | ||||
|    if (mag) { | ||||
|       y[0] /= mag; | ||||
|       y[1] /= mag; | ||||
| @@ -195,47 +103,59 @@ void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, | ||||
|    } | ||||
|  | ||||
| #define M(row,col)  m[col*4+row] | ||||
|    M(0,0) = x[0];  M(0,1) = x[1];  M(0,2) = x[2];  M(0,3) = 0.0; | ||||
|    M(1,0) = y[0];  M(1,1) = y[1];  M(1,2) = y[2];  M(1,3) = 0.0; | ||||
|    M(2,0) = z[0];  M(2,1) = z[1];  M(2,2) = z[2];  M(2,3) = 0.0; | ||||
|    M(3,0) = 0.0;   M(3,1) = 0.0;   M(3,2) = 0.0;   M(3,3) = 1.0; | ||||
|    M(0, 0) = x[0]; | ||||
|    M(0, 1) = x[1]; | ||||
|    M(0, 2) = x[2]; | ||||
|    M(0, 3) = 0.0; | ||||
|    M(1, 0) = y[0]; | ||||
|    M(1, 1) = y[1]; | ||||
|    M(1, 2) = y[2]; | ||||
|    M(1, 3) = 0.0; | ||||
|    M(2, 0) = z[0]; | ||||
|    M(2, 1) = z[1]; | ||||
|    M(2, 2) = z[2]; | ||||
|    M(2, 3) = 0.0; | ||||
|    M(3, 0) = 0.0; | ||||
|    M(3, 1) = 0.0; | ||||
|    M(3, 2) = 0.0; | ||||
|    M(3, 3) = 1.0; | ||||
| #undef M | ||||
|    glMultMatrixd( m ); | ||||
|    glMultMatrixd(m); | ||||
|  | ||||
|    /* Translate Eye to Origin */ | ||||
|    glTranslated( -eyex, -eyey, -eyez ); | ||||
|    glTranslated(-eyex, -eyey, -eyez); | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| void GLAPIENTRY gluOrtho2D( GLdouble left, GLdouble right, | ||||
|                           GLdouble bottom, GLdouble top ) | ||||
| void GLAPIENTRY | ||||
| gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) | ||||
| { | ||||
|    glOrtho( left, right, bottom, top, -1.0, 1.0 ); | ||||
|    glOrtho(left, right, bottom, top, -1.0, 1.0); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| void GLAPIENTRY gluPerspective( GLdouble fovy, GLdouble aspect, | ||||
|                               GLdouble zNear, GLdouble zFar ) | ||||
| void GLAPIENTRY | ||||
| gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) | ||||
| { | ||||
|    GLdouble xmin, xmax, ymin, ymax; | ||||
|  | ||||
|    ymax = zNear * tan( fovy * M_PI / 360.0 ); | ||||
|    ymax = zNear * tan(fovy * M_PI / 360.0); | ||||
|    ymin = -ymax; | ||||
|  | ||||
|    xmin = ymin * aspect; | ||||
|    xmax = ymax * aspect; | ||||
|  | ||||
|    glFrustum( xmin, xmax, ymin, ymax, zNear, zFar ); | ||||
|    glFrustum(xmin, xmax, ymin, ymax, zNear, zFar); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| void GLAPIENTRY gluPickMatrix( GLdouble x, GLdouble y, | ||||
|                              GLdouble width, GLdouble height, | ||||
|                              const GLint viewport[4] ) | ||||
| void GLAPIENTRY | ||||
| gluPickMatrix(GLdouble x, GLdouble y, | ||||
| 	      GLdouble width, GLdouble height, const GLint viewport[4]) | ||||
| { | ||||
|    GLfloat m[16]; | ||||
|    GLfloat sx, sy; | ||||
| @@ -247,18 +167,31 @@ void GLAPIENTRY gluPickMatrix( GLdouble x, GLdouble y, | ||||
|    ty = (viewport[3] + 2.0 * (viewport[1] - y)) / height; | ||||
|  | ||||
| #define M(row,col)  m[col*4+row] | ||||
|    M(0,0) = sx;   M(0,1) = 0.0;  M(0,2) = 0.0;  M(0,3) = tx; | ||||
|    M(1,0) = 0.0;  M(1,1) = sy;   M(1,2) = 0.0;  M(1,3) = ty; | ||||
|    M(2,0) = 0.0;  M(2,1) = 0.0;  M(2,2) = 1.0;  M(2,3) = 0.0; | ||||
|    M(3,0) = 0.0;  M(3,1) = 0.0;  M(3,2) = 0.0;  M(3,3) = 1.0; | ||||
|    M(0, 0) = sx; | ||||
|    M(0, 1) = 0.0; | ||||
|    M(0, 2) = 0.0; | ||||
|    M(0, 3) = tx; | ||||
|    M(1, 0) = 0.0; | ||||
|    M(1, 1) = sy; | ||||
|    M(1, 2) = 0.0; | ||||
|    M(1, 3) = ty; | ||||
|    M(2, 0) = 0.0; | ||||
|    M(2, 1) = 0.0; | ||||
|    M(2, 2) = 1.0; | ||||
|    M(2, 3) = 0.0; | ||||
|    M(3, 0) = 0.0; | ||||
|    M(3, 1) = 0.0; | ||||
|    M(3, 2) = 0.0; | ||||
|    M(3, 3) = 1.0; | ||||
| #undef M | ||||
|  | ||||
|    glMultMatrixf( m ); | ||||
|    glMultMatrixf(m); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode ) | ||||
| const GLubyte *GLAPIENTRY | ||||
| gluErrorString(GLenum errorCode) | ||||
| { | ||||
|    static char *tess_error[] = { | ||||
|       "missing gluBeginPolygon", | ||||
| @@ -304,55 +237,55 @@ const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode ) | ||||
|       "unconnected trim curves", | ||||
|       "unknown knot error", | ||||
|       "negative vertex count encountered", | ||||
|       "negative byte-stride encounteed", | ||||
|       "negative byte-stride encountered", | ||||
|       "unknown type descriptor", | ||||
|       "null control array or knot vector", | ||||
|       "duplicate point on pwlcurve" | ||||
|    }; | ||||
|  | ||||
|    /* GL Errors */ | ||||
|    if (errorCode==GL_NO_ERROR) { | ||||
|    if (errorCode == GL_NO_ERROR) { | ||||
|       return (GLubyte *) "no error"; | ||||
|    } | ||||
|    else if (errorCode==GL_INVALID_VALUE) { | ||||
|    else if (errorCode == GL_INVALID_VALUE) { | ||||
|       return (GLubyte *) "invalid value"; | ||||
|    } | ||||
|    else if (errorCode==GL_INVALID_ENUM) { | ||||
|    else if (errorCode == GL_INVALID_ENUM) { | ||||
|       return (GLubyte *) "invalid enum"; | ||||
|    } | ||||
|    else if (errorCode==GL_INVALID_OPERATION) { | ||||
|    else if (errorCode == GL_INVALID_OPERATION) { | ||||
|       return (GLubyte *) "invalid operation"; | ||||
|    } | ||||
|    else if (errorCode==GL_STACK_OVERFLOW) { | ||||
|    else if (errorCode == GL_STACK_OVERFLOW) { | ||||
|       return (GLubyte *) "stack overflow"; | ||||
|    } | ||||
|    else if (errorCode==GL_STACK_UNDERFLOW) { | ||||
|    else if (errorCode == GL_STACK_UNDERFLOW) { | ||||
|       return (GLubyte *) "stack underflow"; | ||||
|    } | ||||
|    else if (errorCode==GL_OUT_OF_MEMORY) { | ||||
|    else if (errorCode == GL_OUT_OF_MEMORY) { | ||||
|       return (GLubyte *) "out of memory"; | ||||
|    } | ||||
|    /* GLU Errors */ | ||||
|    else if (errorCode==GLU_NO_ERROR) { | ||||
|    else if (errorCode == GLU_NO_ERROR) { | ||||
|       return (GLubyte *) "no error"; | ||||
|    } | ||||
|    else if (errorCode==GLU_INVALID_ENUM) { | ||||
|    else if (errorCode == GLU_INVALID_ENUM) { | ||||
|       return (GLubyte *) "invalid enum"; | ||||
|    } | ||||
|    else if (errorCode==GLU_INVALID_VALUE) { | ||||
|    else if (errorCode == GLU_INVALID_VALUE) { | ||||
|       return (GLubyte *) "invalid value"; | ||||
|    } | ||||
|    else if (errorCode==GLU_OUT_OF_MEMORY) { | ||||
|    else if (errorCode == GLU_OUT_OF_MEMORY) { | ||||
|       return (GLubyte *) "out of memory"; | ||||
|    } | ||||
|    else if (errorCode==GLU_INCOMPATIBLE_GL_VERSION) { | ||||
|    else if (errorCode == GLU_INCOMPATIBLE_GL_VERSION) { | ||||
|       return (GLubyte *) "incompatible GL version"; | ||||
|    } | ||||
|    else if (errorCode>=GLU_TESS_ERROR1 && errorCode<=GLU_TESS_ERROR8) { | ||||
|       return (GLubyte *) tess_error[errorCode-GLU_TESS_ERROR1]; | ||||
|    else if (errorCode >= GLU_TESS_ERROR1 && errorCode <= GLU_TESS_ERROR8) { | ||||
|       return (GLubyte *) tess_error[errorCode - GLU_TESS_ERROR1]; | ||||
|    } | ||||
|    else if (errorCode>=GLU_NURBS_ERROR1 && errorCode<=GLU_NURBS_ERROR37) { | ||||
|       return (GLubyte *) nurbs_error[errorCode-GLU_NURBS_ERROR1]; | ||||
|    else if (errorCode >= GLU_NURBS_ERROR1 && errorCode <= GLU_NURBS_ERROR37) { | ||||
|       return (GLubyte *) nurbs_error[errorCode - GLU_NURBS_ERROR1]; | ||||
|    } | ||||
|    else { | ||||
|       return NULL; | ||||
| @@ -365,58 +298,60 @@ const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode ) | ||||
|  * New in GLU 1.1 | ||||
|  */ | ||||
|  | ||||
| const GLubyte* GLAPIENTRY gluGetString( GLenum name ) | ||||
| const GLubyte *GLAPIENTRY | ||||
| gluGetString(GLenum name) | ||||
| { | ||||
|    static char *extensions = "GL_EXT_abgr GLU_EXT_get_proc_address"; | ||||
|    static char *version = "1.2 Mesa 3.1"; | ||||
|    static char *extensions = "GL_EXT_abgr"; | ||||
|    static char *version = "1.1 Mesa 3.2.1"; | ||||
|  | ||||
|    switch (name) { | ||||
|       case GLU_EXTENSIONS: | ||||
|          return (GLubyte *) extensions; | ||||
|       case GLU_VERSION: | ||||
| 	 return (GLubyte *) version; | ||||
|       default: | ||||
| 	 return NULL; | ||||
|    case GLU_EXTENSIONS: | ||||
|       return (GLubyte *) extensions; | ||||
|    case GLU_VERSION: | ||||
|       return (GLubyte *) version; | ||||
|    default: | ||||
|       return NULL; | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| #if 0  /* gluGetProcAddressEXT not finalized yet! */ | ||||
| #if 0				/* gluGetProcAddressEXT not finalized yet! */ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|    /* for BeOS R4.5 */ | ||||
|    void GLAPIENTRY (*gluGetProcAddressEXT(const GLubyte *procName))(...) | ||||
| void GLAPIENTRY(*gluGetProcAddressEXT(const GLubyte * procName)) (...) | ||||
| #else | ||||
|    void (GLAPIENTRY *gluGetProcAddressEXT(const GLubyte *procName))() | ||||
| void (GLAPIENTRY * gluGetProcAddressEXT(const GLubyte * procName)) () | ||||
| #endif | ||||
| { | ||||
|    struct proc { | ||||
|    struct proc | ||||
|    { | ||||
|       const char *name; | ||||
|       void *address; | ||||
|    }; | ||||
|    static struct proc procTable[] = { | ||||
|       { "gluGetProcAddressEXT", (void *) gluGetProcAddressEXT },  /* me! */ | ||||
|       {"gluGetProcAddressEXT", (void *) gluGetProcAddressEXT},	/* me! */ | ||||
|  | ||||
|       /* new 1.1 functions */ | ||||
|       { "gluGetString", (void *) gluGetString }, | ||||
|       {"gluGetString", (void *) gluGetString}, | ||||
|  | ||||
|       /* new 1.2 functions */ | ||||
|       { "gluTessBeginPolygon", (void *) gluTessBeginPolygon }, | ||||
|       { "gluTessBeginContour", (void *) gluTessBeginContour }, | ||||
|       { "gluTessEndContour", (void *) gluTessEndContour }, | ||||
|       { "gluTessEndPolygon", (void *) gluTessEndPolygon }, | ||||
|       { "gluGetTessProperty", (void *) gluGetTessProperty }, | ||||
|       {"gluTessBeginPolygon", (void *) gluTessBeginPolygon}, | ||||
|       {"gluTessBeginContour", (void *) gluTessBeginContour}, | ||||
|       {"gluTessEndContour", (void *) gluTessEndContour}, | ||||
|       {"gluTessEndPolygon", (void *) gluTessEndPolygon}, | ||||
|       {"gluGetTessProperty", (void *) gluGetTessProperty}, | ||||
|  | ||||
|       /* new 1.3 functions */ | ||||
|  | ||||
|       { NULL, NULL } | ||||
|       {NULL, NULL} | ||||
|    }; | ||||
|    GLuint i; | ||||
|  | ||||
|    for (i = 0; procTable[i].address; i++) { | ||||
|       if (strcmp((const char *) procName, procTable[i].name) == 0) | ||||
|          return (void (GLAPIENTRY *)()) procTable[i].address; | ||||
| 	 return (void (GLAPIENTRY *) ()) procTable[i].address; | ||||
|    } | ||||
|  | ||||
|    return NULL; | ||||
| @@ -430,7 +365,7 @@ const GLubyte* GLAPIENTRY gluGetString( GLenum name ) | ||||
|  * New in GLU 1.3 | ||||
|  */ | ||||
| GLboolean GLAPIENTRY | ||||
| gluCheckExtension( const char *extName, const GLubyte *extString ) | ||||
| gluCheckExtension(const char *extName, const GLubyte * extString) | ||||
| { | ||||
|    assert(extName); | ||||
|    assert(extString); | ||||
| @@ -439,14 +374,14 @@ gluCheckExtension( const char *extName, const GLubyte *extString ) | ||||
|       const char *start = (const char *) extString; | ||||
|  | ||||
|       while (1) { | ||||
|          const char *c = strstr( start, extName ); | ||||
|          if (!c) | ||||
|             return GL_FALSE; | ||||
| 	 const char *c = strstr(start, extName); | ||||
| 	 if (!c) | ||||
| 	    return GL_FALSE; | ||||
|  | ||||
|          if ((c == start || c[-1] == ' ') && (c[len] == ' ' || c[len] == 0)) | ||||
|             return GL_TRUE; | ||||
| 	 if ((c == start || c[-1] == ' ') && (c[len] == ' ' || c[len] == 0)) | ||||
| 	    return GL_TRUE; | ||||
|  | ||||
|          start = c + len; | ||||
| 	 start = c + len; | ||||
|       } | ||||
|    } | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: gluP.h,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ | ||||
| /* $Id: gluP.h,v 1.1.1.1.2.2 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Copyright (C) 1995-1999  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,27 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: gluP.h,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:42  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 1.4  1999/01/03 03:23:15  brianp | ||||
|  * now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump) | ||||
|  * | ||||
|  * Revision 1.3  1997/08/01 22:25:27  brianp | ||||
|  * check for Cygnus Win32 (Stephen Rehel) | ||||
|  * | ||||
|  * Revision 1.2  1997/05/27 02:59:46  brianp | ||||
|  * added defines for APIENTRY and CALLBACK if not compiling on Win32 | ||||
|  * | ||||
|  * Revision 1.1  1996/09/27 01:19:39  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * This file allows the GLU code to be compiled either with the Mesa | ||||
|  * headers or with the real OpenGL headers. | ||||
| @@ -55,6 +34,7 @@ | ||||
| #include "GL/gl.h" | ||||
| #include "GL/glu.h" | ||||
|  | ||||
| #include <string.h> | ||||
|  | ||||
| #ifndef MESA | ||||
|    /* If we're using the real OpenGL header files... */ | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1063
									
								
								src/glu/mesa/nurbs.c
									
									
									
									
									
								
							
							
						
						
									
										1063
									
								
								src/glu/mesa/nurbs.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,9 +1,9 @@ | ||||
| /* $Id: nurbs.h,v 1.2 1999/11/11 03:21:43 kendallb Exp $ */ | ||||
| /* $Id: nurbs.h,v 1.1.1.1.2.1 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Copyright (C) 1995-1999  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,46 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: nurbs.h,v $ | ||||
|  * Revision 1.2  1999/11/11 03:21:43  kendallb | ||||
|  * | ||||
|  *  . Updated GL/gl.h with GLCALLACKP and GLAPIENTRYP macros for compatibility | ||||
|  *    with the IBM VisualAge C++ compiler. Eventually some more code will be | ||||
|  *    needed in the headers to enable the reversal of (__stdcall*) to (*__stdcall) | ||||
|  *    for the IBM compilers, however we currently build using our own header files | ||||
|  *    that already handle this. | ||||
|  * | ||||
|  *  . Changed instances of (GLCALLBACK*) to GLCALLBACKP for compatibility | ||||
|  *    with the IBM VisualAge C++ compiler in src-glu. | ||||
|  * | ||||
|  *  . Misc cleanups for warnings generated with Watcom C++ in src-glu. Compiles | ||||
|  *    with 0 warnings now. | ||||
|  * | ||||
|  *  . tess_hash.c: line 244 - Why is this function stubbed out? I removed the | ||||
|  *    code with a #if 0 to avoid a compiler warning, but it looks dangerous. | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:42  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 1.5  1999/02/27 13:55:31  brianp | ||||
|  * fixed BeOS-related GLU typedef problems | ||||
|  * | ||||
|  * Revision 1.4  1999/01/03 03:23:15  brianp | ||||
|  * now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump) | ||||
|  * | ||||
|  * Revision 1.3  1997/05/27 03:18:23  brianp | ||||
|  * minor clean-up | ||||
|  * | ||||
|  * Revision 1.2  1997/05/27 03:00:16  brianp | ||||
|  * incorporated Bogdan's new NURBS code | ||||
|  * | ||||
|  * Revision 1.1  1996/09/27 01:19:39  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * NURBS implementation written by Bogdan Sikorski (bogdan@cira.it) | ||||
|  * See README2 for more info. | ||||
| @@ -71,198 +31,222 @@ | ||||
| #define NURBS_H | ||||
|  | ||||
|  | ||||
| #define EPSILON 1e-06 /* epsilon for double precision compares */ | ||||
| #define EPSILON 1e-06		/* epsilon for double precision compares */ | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
| 	GLU_NURBS_CURVE, GLU_NURBS_SURFACE, GLU_NURBS_TRIM, GLU_NURBS_NO_TRIM, | ||||
| 	GLU_NURBS_TRIM_DONE, GLU_NURBS_NONE | ||||
| } GLU_nurbs_enum; | ||||
|    GLU_NURBS_CURVE, GLU_NURBS_SURFACE, GLU_NURBS_TRIM, GLU_NURBS_NO_TRIM, | ||||
|    GLU_NURBS_TRIM_DONE, GLU_NURBS_NONE | ||||
| } | ||||
| GLU_nurbs_enum; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
| 	GLU_TRIM_NURBS, GLU_TRIM_PWL | ||||
| } GLU_trim_enum; | ||||
|    GLU_TRIM_NURBS, GLU_TRIM_PWL | ||||
| } | ||||
| GLU_trim_enum; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	GLint	sknot_count; | ||||
| 	GLfloat	*sknot; | ||||
| 	GLint	tknot_count; | ||||
| 	GLfloat	*tknot; | ||||
| 	GLint	s_stride; | ||||
| 	GLint	t_stride; | ||||
| 	GLfloat	*ctrlarray; | ||||
| 	GLint	sorder; | ||||
| 	GLint	torder; | ||||
| 	GLint	dim; | ||||
| 	GLenum	type; | ||||
| } surface_attribs; | ||||
|    GLint sknot_count; | ||||
|    GLfloat *sknot; | ||||
|    GLint tknot_count; | ||||
|    GLfloat *tknot; | ||||
|    GLint s_stride; | ||||
|    GLint t_stride; | ||||
|    GLfloat *ctrlarray; | ||||
|    GLint sorder; | ||||
|    GLint torder; | ||||
|    GLint dim; | ||||
|    GLenum type; | ||||
| } | ||||
| surface_attribs; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	surface_attribs	geom; | ||||
| 	surface_attribs	color; | ||||
| 	surface_attribs	texture; | ||||
| 	surface_attribs	normal; | ||||
| } nurbs_surface; | ||||
|    surface_attribs geom; | ||||
|    surface_attribs color; | ||||
|    surface_attribs texture; | ||||
|    surface_attribs normal; | ||||
| } | ||||
| nurbs_surface; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	GLint			knot_count; | ||||
| 	GLfloat			*knot; | ||||
| 	GLint			stride; | ||||
| 	GLfloat			*ctrlarray; | ||||
| 	GLint			order; | ||||
| 	GLint			dim; | ||||
| 	GLenum			type; | ||||
| } curve_attribs; | ||||
|    GLint knot_count; | ||||
|    GLfloat *knot; | ||||
|    GLint stride; | ||||
|    GLfloat *ctrlarray; | ||||
|    GLint order; | ||||
|    GLint dim; | ||||
|    GLenum type; | ||||
| } | ||||
| curve_attribs; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	GLint			pt_count; | ||||
| 	GLfloat			*ctrlarray; | ||||
| 	GLint			stride; | ||||
| 	GLint			dim; | ||||
| 	GLenum			type; | ||||
| } pwl_curve_attribs; | ||||
|    GLint pt_count; | ||||
|    GLfloat *ctrlarray; | ||||
|    GLint stride; | ||||
|    GLint dim; | ||||
|    GLenum type; | ||||
| } | ||||
| pwl_curve_attribs; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	curve_attribs	geom; | ||||
| 	curve_attribs	color; | ||||
| 	curve_attribs	texture; | ||||
| 	curve_attribs	normal; | ||||
| } nurbs_curve; | ||||
|    curve_attribs geom; | ||||
|    curve_attribs color; | ||||
|    curve_attribs texture; | ||||
|    curve_attribs normal; | ||||
| } | ||||
| nurbs_curve; | ||||
|  | ||||
| typedef struct trim_list_str | ||||
| { | ||||
| 	GLU_trim_enum			trim_type; | ||||
| 	union | ||||
| 	{ | ||||
| 		pwl_curve_attribs	pwl_curve; | ||||
| 		curve_attribs		nurbs_curve; | ||||
| 	}						curve; | ||||
| 	struct trim_list_str	*next; | ||||
| } trim_list; | ||||
|    GLU_trim_enum trim_type; | ||||
|    union | ||||
|    { | ||||
|       pwl_curve_attribs pwl_curve; | ||||
|       curve_attribs nurbs_curve; | ||||
|    } | ||||
|    curve; | ||||
|    struct trim_list_str *next; | ||||
| } | ||||
| trim_list; | ||||
|  | ||||
| typedef struct seg_trim_str | ||||
| { | ||||
| 	GLfloat 			*points; | ||||
| 	GLint				pt_cnt,seg_array_len; | ||||
| 	struct seg_trim_str	*next; | ||||
| } trim_segments; | ||||
|    GLfloat *points; | ||||
|    GLint pt_cnt, seg_array_len; | ||||
|    struct seg_trim_str *next; | ||||
| } | ||||
| trim_segments; | ||||
|  | ||||
| typedef struct nurbs_trim_str | ||||
| { | ||||
| 	trim_list				*trim_loop; | ||||
| 	trim_segments			*segments; | ||||
| 	struct nurbs_trim_str	*next; | ||||
| } nurbs_trim; | ||||
|    trim_list *trim_loop; | ||||
|    trim_segments *segments; | ||||
|    struct nurbs_trim_str *next; | ||||
| } | ||||
| nurbs_trim; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	GLfloat model[16],proj[16],viewport[4]; | ||||
| } culling_and_sampling_str; | ||||
|    GLfloat model[16], proj[16], viewport[4]; | ||||
| } | ||||
| culling_and_sampling_str; | ||||
|  | ||||
| struct GLUnurbs { | ||||
| 	GLboolean		culling; | ||||
| 	GLenum			error; | ||||
| 	void			(GLCALLBACKP error_callback)( GLenum err ); | ||||
| 	GLenum			display_mode; | ||||
| 	GLU_nurbs_enum	nurbs_type; | ||||
| 	GLboolean		auto_load_matrix; | ||||
| 	culling_and_sampling_str | ||||
| 					sampling_matrices; | ||||
| 	GLenum			sampling_method; | ||||
| 	GLfloat			sampling_tolerance; | ||||
| 	GLfloat			parametric_tolerance; | ||||
| 	GLint			u_step, v_step; | ||||
| 	nurbs_surface	surface; | ||||
| 	nurbs_curve		curve; | ||||
| 	nurbs_trim		*trim; | ||||
| struct GLUnurbs | ||||
| { | ||||
|    GLboolean culling; | ||||
|    GLenum error; | ||||
|    void (GLCALLBACK * error_callback) (GLenum err); | ||||
|    GLenum display_mode; | ||||
|    GLU_nurbs_enum nurbs_type; | ||||
|    GLboolean auto_load_matrix; | ||||
|      culling_and_sampling_str sampling_matrices; | ||||
|    GLenum sampling_method; | ||||
|    GLfloat sampling_tolerance; | ||||
|    GLfloat parametric_tolerance; | ||||
|    GLint u_step, v_step; | ||||
|    nurbs_surface surface; | ||||
|    nurbs_curve curve; | ||||
|    nurbs_trim *trim; | ||||
| }; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	GLfloat		*knot; | ||||
| 	GLint		nknots; | ||||
| 	GLfloat		*unified_knot; | ||||
| 	GLint		unified_nknots; | ||||
| 	GLint		order; | ||||
| 	GLint		t_min,t_max; | ||||
| 	GLint		delta_nknots; | ||||
| 	GLboolean	open_at_begin,open_at_end; | ||||
| 	GLfloat		*new_knot; | ||||
| 	GLfloat		*alpha; | ||||
| } knot_str_type; | ||||
|    GLfloat *knot; | ||||
|    GLint nknots; | ||||
|    GLfloat *unified_knot; | ||||
|    GLint unified_nknots; | ||||
|    GLint order; | ||||
|    GLint t_min, t_max; | ||||
|    GLint delta_nknots; | ||||
|    GLboolean open_at_begin, open_at_end; | ||||
|    GLfloat *new_knot; | ||||
|    GLfloat *alpha; | ||||
| } | ||||
| knot_str_type; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	GLfloat	*geom_ctrl; | ||||
| 	GLint	geom_s_stride,geom_t_stride; | ||||
| 	GLfloat	**geom_offsets; | ||||
| 	GLint	geom_s_pt_cnt,geom_t_pt_cnt; | ||||
| 	GLfloat	*color_ctrl; | ||||
| 	GLint	color_s_stride,color_t_stride; | ||||
| 	GLfloat	**color_offsets; | ||||
| 	GLint	color_s_pt_cnt,color_t_pt_cnt; | ||||
| 	GLfloat *normal_ctrl; | ||||
| 	GLint	normal_s_stride,normal_t_stride; | ||||
| 	GLfloat	**normal_offsets; | ||||
| 	GLint	normal_s_pt_cnt,normal_t_pt_cnt; | ||||
| 	GLfloat	*texture_ctrl; | ||||
| 	GLint	texture_s_stride,texture_t_stride; | ||||
| 	GLfloat	**texture_offsets; | ||||
| 	GLint	texture_s_pt_cnt,texture_t_pt_cnt; | ||||
| 	GLint	s_bezier_cnt,t_bezier_cnt; | ||||
| } new_ctrl_type; | ||||
|    GLfloat *geom_ctrl; | ||||
|    GLint geom_s_stride, geom_t_stride; | ||||
|    GLfloat **geom_offsets; | ||||
|    GLint geom_s_pt_cnt, geom_t_pt_cnt; | ||||
|    GLfloat *color_ctrl; | ||||
|    GLint color_s_stride, color_t_stride; | ||||
|    GLfloat **color_offsets; | ||||
|    GLint color_s_pt_cnt, color_t_pt_cnt; | ||||
|    GLfloat *normal_ctrl; | ||||
|    GLint normal_s_stride, normal_t_stride; | ||||
|    GLfloat **normal_offsets; | ||||
|    GLint normal_s_pt_cnt, normal_t_pt_cnt; | ||||
|    GLfloat *texture_ctrl; | ||||
|    GLint texture_s_stride, texture_t_stride; | ||||
|    GLfloat **texture_offsets; | ||||
|    GLint texture_s_pt_cnt, texture_t_pt_cnt; | ||||
|    GLint s_bezier_cnt, t_bezier_cnt; | ||||
| } | ||||
| new_ctrl_type; | ||||
|  | ||||
| extern void call_user_error( GLUnurbsObj *nobj, GLenum error ); | ||||
| extern void call_user_error(GLUnurbsObj * nobj, GLenum error); | ||||
|  | ||||
| extern GLenum test_knot(GLint nknots, GLfloat *knot, GLint order); | ||||
| extern GLenum test_knot(GLint nknots, GLfloat * knot, GLint order); | ||||
|  | ||||
| extern GLenum explode_knot(knot_str_type *the_knot); | ||||
| extern GLenum explode_knot(knot_str_type * the_knot); | ||||
|  | ||||
| extern GLenum calc_alphas(knot_str_type *the_knot); | ||||
| extern GLenum calc_alphas(knot_str_type * the_knot); | ||||
|  | ||||
| extern GLenum calc_new_ctrl_pts(GLfloat *ctrl,GLint stride,knot_str_type *the_knot, | ||||
| 	GLint dim,GLfloat **new_ctrl,GLint *ncontrol); | ||||
| extern GLenum calc_new_ctrl_pts(GLfloat * ctrl, GLint stride, | ||||
| 				knot_str_type * the_knot, GLint dim, | ||||
| 				GLfloat ** new_ctrl, GLint * ncontrol); | ||||
|  | ||||
| extern GLenum glu_do_sampling_crv(GLUnurbsObj *nobj, GLfloat *new_ctrl,GLint n_ctrl, | ||||
| 	GLint order,GLint dim,GLint **factors); | ||||
| extern GLenum glu_do_sampling_crv(GLUnurbsObj * nobj, GLfloat * new_ctrl, | ||||
| 				  GLint n_ctrl, GLint order, GLint dim, | ||||
| 				  GLint ** factors); | ||||
|  | ||||
| extern GLenum glu_do_sampling_3D(GLUnurbsObj *nobj, new_ctrl_type *new_ctrl, | ||||
| 	int **sfactors, GLint **tfactors); | ||||
| extern GLenum glu_do_sampling_3D(GLUnurbsObj * nobj, new_ctrl_type * new_ctrl, | ||||
| 				 int **sfactors, GLint ** tfactors); | ||||
|  | ||||
| extern GLenum glu_do_sampling_uv(GLUnurbsObj *nobj, new_ctrl_type *new_ctrl, | ||||
| 	int **sfactors, GLint **tfactors); | ||||
| extern GLenum glu_do_sampling_uv(GLUnurbsObj * nobj, new_ctrl_type * new_ctrl, | ||||
| 				 int **sfactors, GLint ** tfactors); | ||||
|  | ||||
| extern GLenum glu_do_sampling_param_3D(GLUnurbsObj *nobj, new_ctrl_type *new_ctrl, | ||||
| 	int **sfactors, GLint **tfactors); | ||||
| extern GLenum glu_do_sampling_param_3D(GLUnurbsObj * nobj, | ||||
| 				       new_ctrl_type * new_ctrl, | ||||
| 				       int **sfactors, GLint ** tfactors); | ||||
|  | ||||
| extern GLboolean fine_culling_test_2D(GLUnurbsObj *nobj, GLfloat *ctrl, GLint n_ctrl, | ||||
| 	GLint stride, GLint dim); | ||||
| extern GLboolean fine_culling_test_2D(GLUnurbsObj * nobj, GLfloat * ctrl, | ||||
| 				      GLint n_ctrl, GLint stride, GLint dim); | ||||
|  | ||||
| extern GLboolean fine_culling_test_3D(GLUnurbsObj *nobj, GLfloat *ctrl, | ||||
| 	GLint s_n_ctrl, GLint t_n_ctrl, GLint s_stride, GLint t_stride, GLint dim); | ||||
| extern GLboolean fine_culling_test_3D(GLUnurbsObj * nobj, GLfloat * ctrl, | ||||
| 				      GLint s_n_ctrl, GLint t_n_ctrl, | ||||
| 				      GLint s_stride, GLint t_stride, | ||||
| 				      GLint dim); | ||||
|  | ||||
| extern void do_nurbs_curve( GLUnurbsObj *nobj); | ||||
| extern void do_nurbs_curve(GLUnurbsObj * nobj); | ||||
|  | ||||
| extern void do_nurbs_surface( GLUnurbsObj *nobj); | ||||
| extern void do_nurbs_surface(GLUnurbsObj * nobj); | ||||
|  | ||||
| extern GLenum patch_trimming(GLUnurbsObj *nobj,new_ctrl_type *new_ctrl, | ||||
| 	GLint *sfactors, GLint *tfactors); | ||||
| extern GLenum patch_trimming(GLUnurbsObj * nobj, new_ctrl_type * new_ctrl, | ||||
| 			     GLint * sfactors, GLint * tfactors); | ||||
|  | ||||
| extern void collect_unified_knot(knot_str_type *dest, knot_str_type *src, | ||||
| 	GLfloat maximal_min_knot, GLfloat minimal_max_knot); | ||||
| extern void collect_unified_knot(knot_str_type * dest, knot_str_type * src, | ||||
| 				 GLfloat maximal_min_knot, | ||||
| 				 GLfloat minimal_max_knot); | ||||
|  | ||||
| extern GLenum select_knot_working_range(GLUnurbsObj *nobj,knot_str_type *geom_knot, | ||||
| 	knot_str_type *color_knot, knot_str_type *normal_knot, | ||||
| 	knot_str_type *texture_knot); | ||||
| extern GLenum select_knot_working_range(GLUnurbsObj * nobj, | ||||
| 					knot_str_type * geom_knot, | ||||
| 					knot_str_type * color_knot, | ||||
| 					knot_str_type * normal_knot, | ||||
| 					knot_str_type * texture_knot); | ||||
|  | ||||
| extern void free_unified_knots(knot_str_type *geom_knot, knot_str_type *color_knot, | ||||
| 	knot_str_type *normal_knot, knot_str_type *texture_knot); | ||||
| extern void free_unified_knots(knot_str_type * geom_knot, | ||||
| 			       knot_str_type * color_knot, | ||||
| 			       knot_str_type * normal_knot, | ||||
| 			       knot_str_type * texture_knot); | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: nurbscrv.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ | ||||
| /* $Id: nurbscrv.c,v 1.1.1.1.2.1 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  2.4 | ||||
|  * Copyright (C) 1995-1997  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,32 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: nurbscrv.c,v $ | ||||
|  * Revision 1.1  1999/08/19 00:55:42  jtg | ||||
|  * Initial revision | ||||
|  * | ||||
|  * Revision 1.6  1997/07/24 01:28:44  brianp | ||||
|  * changed precompiled header symbol from PCH to PC_HEADER | ||||
|  * | ||||
|  * Revision 1.5  1997/05/28 02:29:38  brianp | ||||
|  * added support for precompiled headers (PCH), inserted APIENTRY keyword | ||||
|  * | ||||
|  * Revision 1.4  1997/05/27 03:21:22  brianp | ||||
|  * minor clean-up | ||||
|  * | ||||
|  * Revision 1.3  1997/05/27 03:00:16  brianp | ||||
|  * incorporated Bogdan's new NURBS code | ||||
|  * | ||||
|  * Revision 1.2  1996/09/27 23:12:22  brianp | ||||
|  * added return 0 to get_surface_dim() to silence warning | ||||
|  * | ||||
|  * Revision 1.1  1996/09/27 01:19:39  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * NURBS implementation written by Bogdan Sikorski (bogdan@cira.it) | ||||
|  * See README2 for more info. | ||||
| @@ -66,435 +40,406 @@ | ||||
| static int | ||||
| get_curve_dim(GLenum type) | ||||
| { | ||||
| 	switch(type) | ||||
| 	{ | ||||
| 		case GL_MAP1_VERTEX_3:			return 3; | ||||
| 		case GL_MAP1_VERTEX_4:			return 4; | ||||
| 		case GL_MAP1_INDEX:				return 1; | ||||
| 		case GL_MAP1_COLOR_4:			return 4; | ||||
| 		case GL_MAP1_NORMAL:			return 3; | ||||
| 		case GL_MAP1_TEXTURE_COORD_1:	return 1; | ||||
| 		case GL_MAP1_TEXTURE_COORD_2:	return 2; | ||||
| 		case GL_MAP1_TEXTURE_COORD_3:	return 3; | ||||
| 		case GL_MAP1_TEXTURE_COORD_4:	return 4; | ||||
|                 default:  abort();  /* TODO: is this OK? */ | ||||
| 	} | ||||
|         return 0; /*never get here*/ | ||||
|    switch (type) { | ||||
|    case GL_MAP1_VERTEX_3: | ||||
|       return 3; | ||||
|    case GL_MAP1_VERTEX_4: | ||||
|       return 4; | ||||
|    case GL_MAP1_INDEX: | ||||
|       return 1; | ||||
|    case GL_MAP1_COLOR_4: | ||||
|       return 4; | ||||
|    case GL_MAP1_NORMAL: | ||||
|       return 3; | ||||
|    case GL_MAP1_TEXTURE_COORD_1: | ||||
|       return 1; | ||||
|    case GL_MAP1_TEXTURE_COORD_2: | ||||
|       return 2; | ||||
|    case GL_MAP1_TEXTURE_COORD_3: | ||||
|       return 3; | ||||
|    case GL_MAP1_TEXTURE_COORD_4: | ||||
|       return 4; | ||||
|    default: | ||||
|       abort();			/* TODO: is this OK? */ | ||||
|    } | ||||
|    return 0;			/*never get here */ | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| test_nurbs_curve(GLUnurbsObj *nobj, curve_attribs *attribs) | ||||
| test_nurbs_curve(GLUnurbsObj * nobj, curve_attribs * attribs) | ||||
| { | ||||
| 	GLenum err; | ||||
| 	GLint tmp_int; | ||||
|    GLenum err; | ||||
|    GLint tmp_int; | ||||
|  | ||||
| 	if(attribs->order < 0) | ||||
| 	{ | ||||
| 		call_user_error(nobj,GLU_INVALID_VALUE); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	glGetIntegerv(GL_MAX_EVAL_ORDER,&tmp_int); | ||||
| 	if(attribs->order > tmp_int || attribs->order < 2) | ||||
| 	{ | ||||
| 		call_user_error(nobj,GLU_NURBS_ERROR1); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	if(attribs->knot_count < attribs->order +2) | ||||
| 	{ | ||||
| 		call_user_error(nobj,GLU_NURBS_ERROR2); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	if(attribs->stride < 0) | ||||
| 	{ | ||||
| 		call_user_error(nobj,GLU_NURBS_ERROR34); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	if(attribs->knot==NULL || attribs->ctrlarray==NULL) | ||||
| 	{ | ||||
| 		call_user_error(nobj,GLU_NURBS_ERROR36); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	if((err=test_knot(attribs->knot_count,attribs->knot,attribs->order)) | ||||
| 		!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		call_user_error(nobj,err); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	return GLU_NO_ERROR; | ||||
|    if (attribs->order < 0) { | ||||
|       call_user_error(nobj, GLU_INVALID_VALUE); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    glGetIntegerv(GL_MAX_EVAL_ORDER, &tmp_int); | ||||
|    if (attribs->order > tmp_int || attribs->order < 2) { | ||||
|       call_user_error(nobj, GLU_NURBS_ERROR1); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    if (attribs->knot_count < attribs->order + 2) { | ||||
|       call_user_error(nobj, GLU_NURBS_ERROR2); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    if (attribs->stride < 0) { | ||||
|       call_user_error(nobj, GLU_NURBS_ERROR34); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    if (attribs->knot == NULL || attribs->ctrlarray == NULL) { | ||||
|       call_user_error(nobj, GLU_NURBS_ERROR36); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    if ((err = test_knot(attribs->knot_count, attribs->knot, attribs->order)) | ||||
|        != GLU_NO_ERROR) { | ||||
|       call_user_error(nobj, err); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| test_nurbs_curves(GLUnurbsObj *nobj) | ||||
| test_nurbs_curves(GLUnurbsObj * nobj) | ||||
| { | ||||
| 	/* test the geometric data */ | ||||
| 	if(test_nurbs_curve(nobj,&(nobj->curve.geom))!=GLU_NO_ERROR) | ||||
| 		return GLU_ERROR; | ||||
| 	/* now test the attributive data */ | ||||
| 	/* color */ | ||||
| 	if(nobj->curve.color.type!=GLU_INVALID_ENUM) | ||||
| 		if(test_nurbs_curve(nobj,&(nobj->curve.color))!=GLU_NO_ERROR) | ||||
| 			return GLU_ERROR; | ||||
| 	/* normal */ | ||||
| 	if(nobj->curve.normal.type!=GLU_INVALID_ENUM) | ||||
| 		if(test_nurbs_curve(nobj,&(nobj->curve.normal))!=GLU_NO_ERROR) | ||||
| 			return GLU_ERROR; | ||||
| 	/* texture */ | ||||
| 	if(nobj->curve.texture.type!=GLU_INVALID_ENUM) | ||||
| 		if(test_nurbs_curve(nobj,&(nobj->curve.texture))!=GLU_NO_ERROR) | ||||
| 			return GLU_ERROR; | ||||
| 	return GLU_NO_ERROR; | ||||
|    /* test the geometric data */ | ||||
|    if (test_nurbs_curve(nobj, &(nobj->curve.geom)) != GLU_NO_ERROR) | ||||
|       return GLU_ERROR; | ||||
|    /* now test the attributive data */ | ||||
|    /* color */ | ||||
|    if (nobj->curve.color.type != GLU_INVALID_ENUM) | ||||
|       if (test_nurbs_curve(nobj, &(nobj->curve.color)) != GLU_NO_ERROR) | ||||
| 	 return GLU_ERROR; | ||||
|    /* normal */ | ||||
|    if (nobj->curve.normal.type != GLU_INVALID_ENUM) | ||||
|       if (test_nurbs_curve(nobj, &(nobj->curve.normal)) != GLU_NO_ERROR) | ||||
| 	 return GLU_ERROR; | ||||
|    /* texture */ | ||||
|    if (nobj->curve.texture.type != GLU_INVALID_ENUM) | ||||
|       if (test_nurbs_curve(nobj, &(nobj->curve.texture)) != GLU_NO_ERROR) | ||||
| 	 return GLU_ERROR; | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| /* prepare the knot information structures */ | ||||
| static GLenum | ||||
| fill_knot_structures(GLUnurbsObj *nobj,knot_str_type *geom_knot, | ||||
| 	knot_str_type *color_knot, knot_str_type *normal_knot, | ||||
| 	knot_str_type *texture_knot) | ||||
| fill_knot_structures(GLUnurbsObj * nobj, knot_str_type * geom_knot, | ||||
| 		     knot_str_type * color_knot, knot_str_type * normal_knot, | ||||
| 		     knot_str_type * texture_knot) | ||||
| { | ||||
| 	GLint order; | ||||
| 	GLfloat *knot; | ||||
| 	GLint nknots; | ||||
| 	GLint t_min,t_max; | ||||
|    GLint order; | ||||
|    GLfloat *knot; | ||||
|    GLint nknots; | ||||
|    GLint t_min, t_max; | ||||
|  | ||||
| 	geom_knot->unified_knot=NULL; | ||||
| 	knot=geom_knot->knot=nobj->curve.geom.knot; | ||||
| 	nknots=geom_knot->nknots=nobj->curve.geom.knot_count; | ||||
| 	order=geom_knot->order=nobj->curve.geom.order; | ||||
| 	geom_knot->delta_nknots=0; | ||||
| 	t_min=geom_knot->t_min=order-1; | ||||
| 	t_max=geom_knot->t_max=nknots-order; | ||||
| 	if(fabs(knot[t_min]-knot[t_max])<EPSILON) | ||||
| 	{ | ||||
| 		call_user_error(nobj,GLU_NURBS_ERROR3); | ||||
| 		return GLU_ERROR; | ||||
| 	} | ||||
| 	if(fabs(knot[0]-knot[t_min])<EPSILON) | ||||
| 	{ | ||||
| 		/* knot open at beggining */ | ||||
| 		geom_knot->open_at_begin=GL_TRUE; | ||||
| 	} | ||||
| 	else | ||||
| 		geom_knot->open_at_begin=GL_FALSE; | ||||
| 	if(fabs(knot[t_max]-knot[nknots-1])<EPSILON) | ||||
| 	{ | ||||
| 		/* knot open at end */ | ||||
| 		geom_knot->open_at_end=GL_TRUE; | ||||
| 	} | ||||
| 	else | ||||
| 		geom_knot->open_at_end=GL_FALSE; | ||||
| 	if(nobj->curve.color.type!=GLU_INVALID_ENUM) | ||||
| 	{ | ||||
| 		color_knot->unified_knot=(GLfloat *)1; | ||||
| 		knot=color_knot->knot=nobj->curve.color.knot; | ||||
| 		nknots=color_knot->nknots=nobj->curve.color.knot_count; | ||||
| 		order=color_knot->order=nobj->curve.color.order; | ||||
| 		color_knot->delta_nknots=0; | ||||
| 		t_min=color_knot->t_min=order-1; | ||||
| 		t_max=color_knot->t_max=nknots-order; | ||||
| 		if(fabs(knot[t_min]-knot[t_max])<EPSILON) | ||||
| 		{ | ||||
| 			call_user_error(nobj,GLU_NURBS_ERROR3); | ||||
| 			return GLU_ERROR; | ||||
| 		} | ||||
| 		if(fabs(knot[0]-knot[t_min])<EPSILON) | ||||
| 		{ | ||||
| 			/* knot open at beggining */ | ||||
| 			color_knot->open_at_begin=GL_TRUE; | ||||
| 		} | ||||
| 		else | ||||
| 			color_knot->open_at_begin=GL_FALSE; | ||||
| 		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON) | ||||
| 		{ | ||||
| 			/* knot open at end */ | ||||
| 			color_knot->open_at_end=GL_TRUE; | ||||
| 		} | ||||
| 		else | ||||
| 			color_knot->open_at_end=GL_FALSE; | ||||
| 	} | ||||
| 	else | ||||
| 		color_knot->unified_knot=NULL; | ||||
| 	if(nobj->curve.normal.type!=GLU_INVALID_ENUM) | ||||
| 	{ | ||||
| 		normal_knot->unified_knot=(GLfloat *)1; | ||||
| 		knot=normal_knot->knot=nobj->curve.normal.knot; | ||||
| 		nknots=normal_knot->nknots=nobj->curve.normal.knot_count; | ||||
| 		order=normal_knot->order=nobj->curve.normal.order; | ||||
| 		normal_knot->delta_nknots=0; | ||||
| 		t_min=normal_knot->t_min=order-1; | ||||
| 		t_max=normal_knot->t_max=nknots-order; | ||||
| 		if(fabs(knot[t_min]-knot[t_max])<EPSILON) | ||||
| 		{ | ||||
| 			call_user_error(nobj,GLU_NURBS_ERROR3); | ||||
| 			return GLU_ERROR; | ||||
| 		} | ||||
| 		if(fabs(knot[0]-knot[t_min])<EPSILON) | ||||
| 		{ | ||||
| 			/* knot open at beggining */ | ||||
| 			normal_knot->open_at_begin=GL_TRUE; | ||||
| 		} | ||||
| 		else | ||||
| 			normal_knot->open_at_begin=GL_FALSE; | ||||
| 		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON) | ||||
| 		{ | ||||
| 			/* knot open at end */ | ||||
| 			normal_knot->open_at_end=GL_TRUE; | ||||
| 		} | ||||
| 		else | ||||
| 			normal_knot->open_at_end=GL_FALSE; | ||||
| 	} | ||||
| 	else | ||||
| 		normal_knot->unified_knot=NULL; | ||||
| 	if(nobj->curve.texture.type!=GLU_INVALID_ENUM) | ||||
| 	{ | ||||
| 		texture_knot->unified_knot=(GLfloat *)1; | ||||
| 		knot=texture_knot->knot=nobj->curve.texture.knot; | ||||
| 		nknots=texture_knot->nknots=nobj->curve.texture.knot_count; | ||||
| 		order=texture_knot->order=nobj->curve.texture.order; | ||||
| 		texture_knot->delta_nknots=0; | ||||
| 		t_min=texture_knot->t_min=order-1; | ||||
| 		t_max=texture_knot->t_max=nknots-order; | ||||
| 		if(fabs(knot[t_min]-knot[t_max])<EPSILON) | ||||
| 		{ | ||||
| 			call_user_error(nobj,GLU_NURBS_ERROR3); | ||||
| 			return GLU_ERROR; | ||||
| 		} | ||||
| 		if(fabs(knot[0]-knot[t_min])<EPSILON) | ||||
| 		{ | ||||
| 			/* knot open at beggining */ | ||||
| 			texture_knot->open_at_begin=GL_TRUE; | ||||
| 		} | ||||
| 		else | ||||
| 			texture_knot->open_at_begin=GL_FALSE; | ||||
| 		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON) | ||||
| 		{ | ||||
| 			/* knot open at end */ | ||||
| 			texture_knot->open_at_end=GL_TRUE; | ||||
| 		} | ||||
| 		else | ||||
| 			texture_knot->open_at_end=GL_FALSE; | ||||
| 	} | ||||
| 	else | ||||
| 		texture_knot->unified_knot=NULL; | ||||
| 	return GLU_NO_ERROR; | ||||
|    geom_knot->unified_knot = NULL; | ||||
|    knot = geom_knot->knot = nobj->curve.geom.knot; | ||||
|    nknots = geom_knot->nknots = nobj->curve.geom.knot_count; | ||||
|    order = geom_knot->order = nobj->curve.geom.order; | ||||
|    geom_knot->delta_nknots = 0; | ||||
|    t_min = geom_knot->t_min = order - 1; | ||||
|    t_max = geom_knot->t_max = nknots - order; | ||||
|    if (fabs(knot[t_min] - knot[t_max]) < EPSILON) { | ||||
|       call_user_error(nobj, GLU_NURBS_ERROR3); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    if (fabs(knot[0] - knot[t_min]) < EPSILON) { | ||||
|       /* knot open at beggining */ | ||||
|       geom_knot->open_at_begin = GL_TRUE; | ||||
|    } | ||||
|    else | ||||
|       geom_knot->open_at_begin = GL_FALSE; | ||||
|    if (fabs(knot[t_max] - knot[nknots - 1]) < EPSILON) { | ||||
|       /* knot open at end */ | ||||
|       geom_knot->open_at_end = GL_TRUE; | ||||
|    } | ||||
|    else | ||||
|       geom_knot->open_at_end = GL_FALSE; | ||||
|    if (nobj->curve.color.type != GLU_INVALID_ENUM) { | ||||
|       color_knot->unified_knot = (GLfloat *) 1; | ||||
|       knot = color_knot->knot = nobj->curve.color.knot; | ||||
|       nknots = color_knot->nknots = nobj->curve.color.knot_count; | ||||
|       order = color_knot->order = nobj->curve.color.order; | ||||
|       color_knot->delta_nknots = 0; | ||||
|       t_min = color_knot->t_min = order - 1; | ||||
|       t_max = color_knot->t_max = nknots - order; | ||||
|       if (fabs(knot[t_min] - knot[t_max]) < EPSILON) { | ||||
| 	 call_user_error(nobj, GLU_NURBS_ERROR3); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|       if (fabs(knot[0] - knot[t_min]) < EPSILON) { | ||||
| 	 /* knot open at beggining */ | ||||
| 	 color_knot->open_at_begin = GL_TRUE; | ||||
|       } | ||||
|       else | ||||
| 	 color_knot->open_at_begin = GL_FALSE; | ||||
|       if (fabs(knot[t_max] - knot[nknots - 1]) < EPSILON) { | ||||
| 	 /* knot open at end */ | ||||
| 	 color_knot->open_at_end = GL_TRUE; | ||||
|       } | ||||
|       else | ||||
| 	 color_knot->open_at_end = GL_FALSE; | ||||
|    } | ||||
|    else | ||||
|       color_knot->unified_knot = NULL; | ||||
|    if (nobj->curve.normal.type != GLU_INVALID_ENUM) { | ||||
|       normal_knot->unified_knot = (GLfloat *) 1; | ||||
|       knot = normal_knot->knot = nobj->curve.normal.knot; | ||||
|       nknots = normal_knot->nknots = nobj->curve.normal.knot_count; | ||||
|       order = normal_knot->order = nobj->curve.normal.order; | ||||
|       normal_knot->delta_nknots = 0; | ||||
|       t_min = normal_knot->t_min = order - 1; | ||||
|       t_max = normal_knot->t_max = nknots - order; | ||||
|       if (fabs(knot[t_min] - knot[t_max]) < EPSILON) { | ||||
| 	 call_user_error(nobj, GLU_NURBS_ERROR3); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|       if (fabs(knot[0] - knot[t_min]) < EPSILON) { | ||||
| 	 /* knot open at beggining */ | ||||
| 	 normal_knot->open_at_begin = GL_TRUE; | ||||
|       } | ||||
|       else | ||||
| 	 normal_knot->open_at_begin = GL_FALSE; | ||||
|       if (fabs(knot[t_max] - knot[nknots - 1]) < EPSILON) { | ||||
| 	 /* knot open at end */ | ||||
| 	 normal_knot->open_at_end = GL_TRUE; | ||||
|       } | ||||
|       else | ||||
| 	 normal_knot->open_at_end = GL_FALSE; | ||||
|    } | ||||
|    else | ||||
|       normal_knot->unified_knot = NULL; | ||||
|    if (nobj->curve.texture.type != GLU_INVALID_ENUM) { | ||||
|       texture_knot->unified_knot = (GLfloat *) 1; | ||||
|       knot = texture_knot->knot = nobj->curve.texture.knot; | ||||
|       nknots = texture_knot->nknots = nobj->curve.texture.knot_count; | ||||
|       order = texture_knot->order = nobj->curve.texture.order; | ||||
|       texture_knot->delta_nknots = 0; | ||||
|       t_min = texture_knot->t_min = order - 1; | ||||
|       t_max = texture_knot->t_max = nknots - order; | ||||
|       if (fabs(knot[t_min] - knot[t_max]) < EPSILON) { | ||||
| 	 call_user_error(nobj, GLU_NURBS_ERROR3); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|       if (fabs(knot[0] - knot[t_min]) < EPSILON) { | ||||
| 	 /* knot open at beggining */ | ||||
| 	 texture_knot->open_at_begin = GL_TRUE; | ||||
|       } | ||||
|       else | ||||
| 	 texture_knot->open_at_begin = GL_FALSE; | ||||
|       if (fabs(knot[t_max] - knot[nknots - 1]) < EPSILON) { | ||||
| 	 /* knot open at end */ | ||||
| 	 texture_knot->open_at_end = GL_TRUE; | ||||
|       } | ||||
|       else | ||||
| 	 texture_knot->open_at_end = GL_FALSE; | ||||
|    } | ||||
|    else | ||||
|       texture_knot->unified_knot = NULL; | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| /* covert the NURBS curve into a series of adjacent Bezier curves */ | ||||
| static GLenum | ||||
| convert_curve(knot_str_type *the_knot, curve_attribs *attrib, | ||||
| 	GLfloat **new_ctrl,GLint *ncontrol) | ||||
| convert_curve(knot_str_type * the_knot, curve_attribs * attrib, | ||||
| 	      GLfloat ** new_ctrl, GLint * ncontrol) | ||||
| { | ||||
| 	GLenum err; | ||||
|    GLenum err; | ||||
|  | ||||
| 	if((err=explode_knot(the_knot))!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		if(the_knot->unified_knot) | ||||
| 		{ | ||||
| 			free(the_knot->unified_knot); | ||||
| 			the_knot->unified_knot=NULL; | ||||
| 		} | ||||
| 		return err; | ||||
| 	} | ||||
| 	if(the_knot->unified_knot) | ||||
| 	{ | ||||
| 		free(the_knot->unified_knot); | ||||
| 		the_knot->unified_knot=NULL; | ||||
| 	} | ||||
| 	if((err=calc_alphas(the_knot))!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		free(the_knot->new_knot); | ||||
| 		return err; | ||||
| 	} | ||||
| 	free(the_knot->new_knot); | ||||
| 	if((err=calc_new_ctrl_pts(attrib->ctrlarray,attrib->stride,the_knot, | ||||
| 							attrib->dim,new_ctrl,ncontrol)) | ||||
| 		!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		free(the_knot->alpha); | ||||
| 		return err; | ||||
| 	} | ||||
| 	free(the_knot->alpha); | ||||
| 	return GLU_NO_ERROR; | ||||
|    if ((err = explode_knot(the_knot)) != GLU_NO_ERROR) { | ||||
|       if (the_knot->unified_knot) { | ||||
| 	 free(the_knot->unified_knot); | ||||
| 	 the_knot->unified_knot = NULL; | ||||
|       } | ||||
|       return err; | ||||
|    } | ||||
|    if (the_knot->unified_knot) { | ||||
|       free(the_knot->unified_knot); | ||||
|       the_knot->unified_knot = NULL; | ||||
|    } | ||||
|    if ((err = calc_alphas(the_knot)) != GLU_NO_ERROR) { | ||||
|       free(the_knot->new_knot); | ||||
|       return err; | ||||
|    } | ||||
|    free(the_knot->new_knot); | ||||
|    if ((err = calc_new_ctrl_pts(attrib->ctrlarray, attrib->stride, the_knot, | ||||
| 				attrib->dim, new_ctrl, ncontrol)) | ||||
|        != GLU_NO_ERROR) { | ||||
|       free(the_knot->alpha); | ||||
|       return err; | ||||
|    } | ||||
|    free(the_knot->alpha); | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| /* covert curves - geometry and possible attribute ones into equivalent */ | ||||
| /* sequence of adjacent Bezier curves */ | ||||
| static GLenum | ||||
| convert_curves(GLUnurbsObj *nobj, GLfloat **new_geom_ctrl, | ||||
| 	GLint *ncontrol, GLfloat **new_color_ctrl, GLfloat **new_normal_ctrl, | ||||
| 	GLfloat **new_texture_ctrl) | ||||
| convert_curves(GLUnurbsObj * nobj, GLfloat ** new_geom_ctrl, | ||||
| 	       GLint * ncontrol, GLfloat ** new_color_ctrl, | ||||
| 	       GLfloat ** new_normal_ctrl, GLfloat ** new_texture_ctrl) | ||||
| { | ||||
| 	knot_str_type	geom_knot,color_knot,normal_knot,texture_knot; | ||||
| 	GLint			junk; | ||||
| 	GLenum			err; | ||||
|    knot_str_type geom_knot, color_knot, normal_knot, texture_knot; | ||||
|    GLint junk; | ||||
|    GLenum err; | ||||
|  | ||||
| 	*new_color_ctrl=*new_normal_ctrl=*new_texture_ctrl=NULL; | ||||
|    *new_color_ctrl = *new_normal_ctrl = *new_texture_ctrl = NULL; | ||||
|  | ||||
| 	if(fill_knot_structures(nobj,&geom_knot,&color_knot,&normal_knot, | ||||
| 			&texture_knot)!=GLU_NO_ERROR) | ||||
| 		return GLU_ERROR; | ||||
|    if (fill_knot_structures(nobj, &geom_knot, &color_knot, &normal_knot, | ||||
| 			    &texture_knot) != GLU_NO_ERROR) | ||||
|       return GLU_ERROR; | ||||
|  | ||||
| 	/* unify knots - all knots should have the same number of working */ | ||||
| 	/* ranges */ | ||||
| 	if((err=select_knot_working_range(nobj,&geom_knot,&color_knot,&normal_knot, | ||||
| 				&texture_knot))!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		return err; | ||||
| 	} | ||||
| 	/* convert the geometry curve */ | ||||
| 	nobj->curve.geom.dim=get_curve_dim(nobj->curve.geom.type); | ||||
| 	if((err=convert_curve(&geom_knot,&(nobj->curve.geom),new_geom_ctrl, | ||||
| 						ncontrol))!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		free_unified_knots(&geom_knot,&color_knot,&normal_knot,&texture_knot); | ||||
| 		call_user_error(nobj,err); | ||||
| 		return err; | ||||
| 	} | ||||
| 	/* if additional attributive curves are given convert them as well */ | ||||
| 	if(color_knot.unified_knot) | ||||
| 	{ | ||||
| 		nobj->curve.color.dim=get_curve_dim(nobj->curve.color.type); | ||||
| 		if((err=convert_curve(&color_knot,&(nobj->curve.color), | ||||
| 			new_color_ctrl,&junk))!=GLU_NO_ERROR) | ||||
| 		{ | ||||
| 			free_unified_knots(&geom_knot,&color_knot,&normal_knot,&texture_knot); | ||||
| 			free(*new_geom_ctrl); | ||||
| 			call_user_error(nobj,err); | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	if(normal_knot.unified_knot) | ||||
| 	{ | ||||
| 		nobj->curve.normal.dim=get_curve_dim(nobj->curve.normal.type); | ||||
| 		if((err=convert_curve(&normal_knot,&(nobj->curve.normal), | ||||
| 			new_normal_ctrl,&junk))!=GLU_NO_ERROR) | ||||
| 		{ | ||||
| 			free_unified_knots(&geom_knot,&color_knot,&normal_knot,&texture_knot); | ||||
| 			free(*new_geom_ctrl); | ||||
| 			if(*new_color_ctrl) | ||||
| 				free(*new_color_ctrl); | ||||
| 			call_user_error(nobj,err); | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	if(texture_knot.unified_knot) | ||||
| 	{ | ||||
| 		nobj->curve.texture.dim=get_curve_dim(nobj->curve.texture.type); | ||||
| 		if((err=convert_curve(&texture_knot,&(nobj->curve.texture), | ||||
| 			new_texture_ctrl,&junk))!=GLU_NO_ERROR) | ||||
| 		{ | ||||
| 			free_unified_knots(&geom_knot,&color_knot,&normal_knot,&texture_knot); | ||||
| 			free(*new_geom_ctrl); | ||||
| 			if(*new_color_ctrl) | ||||
| 				free(*new_color_ctrl); | ||||
| 			if(*new_normal_ctrl) | ||||
| 				free(*new_normal_ctrl); | ||||
| 			call_user_error(nobj,err); | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	return GLU_NO_ERROR; | ||||
|    /* unify knots - all knots should have the same number of working */ | ||||
|    /* ranges */ | ||||
|    if ( | ||||
|        (err = | ||||
| 	select_knot_working_range(nobj, &geom_knot, &color_knot, &normal_knot, | ||||
| 				  &texture_knot)) != GLU_NO_ERROR) { | ||||
|       return err; | ||||
|    } | ||||
|    /* convert the geometry curve */ | ||||
|    nobj->curve.geom.dim = get_curve_dim(nobj->curve.geom.type); | ||||
|    if ((err = convert_curve(&geom_knot, &(nobj->curve.geom), new_geom_ctrl, | ||||
| 			    ncontrol)) != GLU_NO_ERROR) { | ||||
|       free_unified_knots(&geom_knot, &color_knot, &normal_knot, | ||||
| 			 &texture_knot); | ||||
|       call_user_error(nobj, err); | ||||
|       return err; | ||||
|    } | ||||
|    /* if additional attributive curves are given convert them as well */ | ||||
|    if (color_knot.unified_knot) { | ||||
|       nobj->curve.color.dim = get_curve_dim(nobj->curve.color.type); | ||||
|       if ((err = convert_curve(&color_knot, &(nobj->curve.color), | ||||
| 			       new_color_ctrl, &junk)) != GLU_NO_ERROR) { | ||||
| 	 free_unified_knots(&geom_knot, &color_knot, &normal_knot, | ||||
| 			    &texture_knot); | ||||
| 	 free(*new_geom_ctrl); | ||||
| 	 call_user_error(nobj, err); | ||||
| 	 return err; | ||||
|       } | ||||
|    } | ||||
|    if (normal_knot.unified_knot) { | ||||
|       nobj->curve.normal.dim = get_curve_dim(nobj->curve.normal.type); | ||||
|       if ((err = convert_curve(&normal_knot, &(nobj->curve.normal), | ||||
| 			       new_normal_ctrl, &junk)) != GLU_NO_ERROR) { | ||||
| 	 free_unified_knots(&geom_knot, &color_knot, &normal_knot, | ||||
| 			    &texture_knot); | ||||
| 	 free(*new_geom_ctrl); | ||||
| 	 if (*new_color_ctrl) | ||||
| 	    free(*new_color_ctrl); | ||||
| 	 call_user_error(nobj, err); | ||||
| 	 return err; | ||||
|       } | ||||
|    } | ||||
|    if (texture_knot.unified_knot) { | ||||
|       nobj->curve.texture.dim = get_curve_dim(nobj->curve.texture.type); | ||||
|       if ((err = convert_curve(&texture_knot, &(nobj->curve.texture), | ||||
| 			       new_texture_ctrl, &junk)) != GLU_NO_ERROR) { | ||||
| 	 free_unified_knots(&geom_knot, &color_knot, &normal_knot, | ||||
| 			    &texture_knot); | ||||
| 	 free(*new_geom_ctrl); | ||||
| 	 if (*new_color_ctrl) | ||||
| 	    free(*new_color_ctrl); | ||||
| 	 if (*new_normal_ctrl) | ||||
| 	    free(*new_normal_ctrl); | ||||
| 	 call_user_error(nobj, err); | ||||
| 	 return err; | ||||
|       } | ||||
|    } | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| /* main NURBS curve procedure */ | ||||
| void do_nurbs_curve( GLUnurbsObj *nobj) | ||||
| void | ||||
| do_nurbs_curve(GLUnurbsObj * nobj) | ||||
| { | ||||
| 	GLint geom_order,color_order=0,normal_order=0,texture_order=0; | ||||
| 	GLenum geom_type; | ||||
| 	GLint n_ctrl; | ||||
| 	GLfloat *new_geom_ctrl,*new_color_ctrl,*new_normal_ctrl,*new_texture_ctrl; | ||||
| 	GLfloat *geom_ctrl,*color_ctrl,*normal_ctrl,*texture_ctrl; | ||||
| 	GLint *factors; | ||||
| 	GLint i,j; | ||||
| 	GLint geom_dim,color_dim=0,normal_dim=0,texture_dim=0; | ||||
|    GLint geom_order, color_order = 0, normal_order = 0, texture_order = 0; | ||||
|    GLenum geom_type; | ||||
|    GLint n_ctrl; | ||||
|    GLfloat *new_geom_ctrl, *new_color_ctrl, *new_normal_ctrl, | ||||
|       *new_texture_ctrl; | ||||
|    GLfloat *geom_ctrl, *color_ctrl, *normal_ctrl, *texture_ctrl; | ||||
|    GLint *factors; | ||||
|    GLint i, j; | ||||
|    GLint geom_dim, color_dim = 0, normal_dim = 0, texture_dim = 0; | ||||
|  | ||||
| 	/* test the user supplied data */ | ||||
| 	if(test_nurbs_curves(nobj)!=GLU_NO_ERROR) | ||||
| 		return; | ||||
|    /* test the user supplied data */ | ||||
|    if (test_nurbs_curves(nobj) != GLU_NO_ERROR) | ||||
|       return; | ||||
|  | ||||
| 	if(convert_curves(nobj,&new_geom_ctrl,&n_ctrl,&new_color_ctrl, | ||||
| 					&new_normal_ctrl,&new_texture_ctrl)!=GLU_NO_ERROR) | ||||
| 		return; | ||||
|    if (convert_curves(nobj, &new_geom_ctrl, &n_ctrl, &new_color_ctrl, | ||||
| 		      &new_normal_ctrl, &new_texture_ctrl) != GLU_NO_ERROR) | ||||
|       return; | ||||
|  | ||||
| 	geom_order=nobj->curve.geom.order; | ||||
| 	geom_type=nobj->curve.geom.type; | ||||
| 	geom_dim=nobj->curve.geom.dim; | ||||
|    geom_order = nobj->curve.geom.order; | ||||
|    geom_type = nobj->curve.geom.type; | ||||
|    geom_dim = nobj->curve.geom.dim; | ||||
|  | ||||
| 	if(glu_do_sampling_crv(nobj,new_geom_ctrl,n_ctrl,geom_order,geom_dim, | ||||
| 						&factors) | ||||
| 		!=GLU_NO_ERROR) | ||||
| 	{ | ||||
| 		free(new_geom_ctrl); | ||||
| 		if(new_color_ctrl) | ||||
| 			free(new_color_ctrl); | ||||
| 		if(new_normal_ctrl) | ||||
| 			free(new_normal_ctrl); | ||||
| 		if(new_texture_ctrl) | ||||
| 			free(new_texture_ctrl); | ||||
| 		return; | ||||
| 	} | ||||
| 	glEnable(geom_type); | ||||
| 	if(new_color_ctrl) | ||||
| 	{ | ||||
| 		glEnable(nobj->curve.color.type); | ||||
| 		color_dim=nobj->curve.color.dim; | ||||
| 		color_ctrl=new_color_ctrl; | ||||
| 		color_order=nobj->curve.color.order; | ||||
| 	} | ||||
| 	if(new_normal_ctrl) | ||||
| 	{ | ||||
| 		glEnable(nobj->curve.normal.type); | ||||
| 		normal_dim=nobj->curve.normal.dim; | ||||
| 		normal_ctrl=new_normal_ctrl; | ||||
| 		normal_order=nobj->curve.normal.order; | ||||
| 	} | ||||
| 	if(new_texture_ctrl) | ||||
| 	{ | ||||
| 		glEnable(nobj->curve.texture.type); | ||||
| 		texture_dim=nobj->curve.texture.dim; | ||||
| 		texture_ctrl=new_texture_ctrl; | ||||
| 		texture_order=nobj->curve.texture.order; | ||||
| 	} | ||||
| 	for(i=0 , j=0, geom_ctrl=new_geom_ctrl; | ||||
| 		i<n_ctrl; | ||||
| 		i+=geom_order , j++ , geom_ctrl+=geom_order*geom_dim) | ||||
| 	{ | ||||
| 		if(fine_culling_test_2D(nobj,geom_ctrl,geom_order,geom_dim,geom_dim)) | ||||
| 		{ | ||||
| 			color_ctrl+=color_order*color_dim; | ||||
| 			normal_ctrl+=normal_order*normal_dim; | ||||
| 			texture_ctrl+=texture_order*texture_dim; | ||||
| 			continue; | ||||
| 		} | ||||
| 		glMap1f(geom_type, 0.0, 1.0, geom_dim, geom_order, geom_ctrl); | ||||
| 		if(new_color_ctrl) | ||||
| 		{ | ||||
| 			glMap1f(nobj->curve.color.type, 0.0, 1.0, color_dim, | ||||
| 				color_order,color_ctrl); | ||||
| 			color_ctrl+=color_order*color_dim; | ||||
| 		} | ||||
| 		if(new_normal_ctrl) | ||||
| 		{ | ||||
| 			glMap1f(nobj->curve.normal.type, 0.0, 1.0, normal_dim, | ||||
| 				normal_order,normal_ctrl); | ||||
| 			normal_ctrl+=normal_order*normal_dim; | ||||
| 		} | ||||
| 		if(new_texture_ctrl) | ||||
| 		{ | ||||
| 			glMap1f(nobj->curve.texture.type, 0.0, 1.0, texture_dim, | ||||
| 				texture_order,texture_ctrl); | ||||
| 			texture_ctrl+=texture_order*texture_dim; | ||||
| 		} | ||||
| 		glMapGrid1f(factors[j],0.0,1.0); | ||||
| 		glEvalMesh1(GL_LINE,0,factors[j]); | ||||
| 	} | ||||
| 	free(new_geom_ctrl); | ||||
| 	free(factors); | ||||
| 	if(new_color_ctrl) | ||||
| 		free(new_color_ctrl); | ||||
| 	if(new_normal_ctrl) | ||||
| 		free(new_normal_ctrl); | ||||
| 	if(new_texture_ctrl) | ||||
| 		free(new_texture_ctrl); | ||||
|    if (glu_do_sampling_crv(nobj, new_geom_ctrl, n_ctrl, geom_order, geom_dim, | ||||
| 			   &factors) != GLU_NO_ERROR) { | ||||
|       free(new_geom_ctrl); | ||||
|       if (new_color_ctrl) | ||||
| 	 free(new_color_ctrl); | ||||
|       if (new_normal_ctrl) | ||||
| 	 free(new_normal_ctrl); | ||||
|       if (new_texture_ctrl) | ||||
| 	 free(new_texture_ctrl); | ||||
|       return; | ||||
|    } | ||||
|    glEnable(geom_type); | ||||
|    if (new_color_ctrl) { | ||||
|       glEnable(nobj->curve.color.type); | ||||
|       color_dim = nobj->curve.color.dim; | ||||
|       color_ctrl = new_color_ctrl; | ||||
|       color_order = nobj->curve.color.order; | ||||
|    } | ||||
|    if (new_normal_ctrl) { | ||||
|       glEnable(nobj->curve.normal.type); | ||||
|       normal_dim = nobj->curve.normal.dim; | ||||
|       normal_ctrl = new_normal_ctrl; | ||||
|       normal_order = nobj->curve.normal.order; | ||||
|    } | ||||
|    if (new_texture_ctrl) { | ||||
|       glEnable(nobj->curve.texture.type); | ||||
|       texture_dim = nobj->curve.texture.dim; | ||||
|       texture_ctrl = new_texture_ctrl; | ||||
|       texture_order = nobj->curve.texture.order; | ||||
|    } | ||||
|    for (i = 0, j = 0, geom_ctrl = new_geom_ctrl; | ||||
| 	i < n_ctrl; i += geom_order, j++, geom_ctrl += geom_order * geom_dim) { | ||||
|       if (fine_culling_test_2D | ||||
| 	  (nobj, geom_ctrl, geom_order, geom_dim, geom_dim)) { | ||||
| 	 color_ctrl += color_order * color_dim; | ||||
| 	 normal_ctrl += normal_order * normal_dim; | ||||
| 	 texture_ctrl += texture_order * texture_dim; | ||||
| 	 continue; | ||||
|       } | ||||
|       glMap1f(geom_type, 0.0, 1.0, geom_dim, geom_order, geom_ctrl); | ||||
|       if (new_color_ctrl) { | ||||
| 	 glMap1f(nobj->curve.color.type, 0.0, 1.0, color_dim, | ||||
| 		 color_order, color_ctrl); | ||||
| 	 color_ctrl += color_order * color_dim; | ||||
|       } | ||||
|       if (new_normal_ctrl) { | ||||
| 	 glMap1f(nobj->curve.normal.type, 0.0, 1.0, normal_dim, | ||||
| 		 normal_order, normal_ctrl); | ||||
| 	 normal_ctrl += normal_order * normal_dim; | ||||
|       } | ||||
|       if (new_texture_ctrl) { | ||||
| 	 glMap1f(nobj->curve.texture.type, 0.0, 1.0, texture_dim, | ||||
| 		 texture_order, texture_ctrl); | ||||
| 	 texture_ctrl += texture_order * texture_dim; | ||||
|       } | ||||
|       glMapGrid1f(factors[j], 0.0, 1.0); | ||||
|       glEvalMesh1(GL_LINE, 0, factors[j]); | ||||
|    } | ||||
|    free(new_geom_ctrl); | ||||
|    free(factors); | ||||
|    if (new_color_ctrl) | ||||
|       free(new_color_ctrl); | ||||
|    if (new_normal_ctrl) | ||||
|       free(new_normal_ctrl); | ||||
|    if (new_texture_ctrl) | ||||
|       free(new_texture_ctrl); | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										938
									
								
								src/glu/mesa/polytest.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										938
									
								
								src/glu/mesa/polytest.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,938 @@ | ||||
| /* $Id: polytest.c,v 1.2.2.1 2000/07/11 02:07:52 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * This file is part of the polygon tesselation code contributed by | ||||
|  * Bogdan Sikorski | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifdef PC_HEADER | ||||
| #include "all.h" | ||||
| #else | ||||
| #include <math.h> | ||||
| #include <stdlib.h> | ||||
| #include "gluP.h" | ||||
| #include "tess.h" | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
| static GLenum store_polygon_as_contour(GLUtriangulatorObj *); | ||||
| static void free_current_polygon(tess_polygon *); | ||||
| static void prepare_projection_info(GLUtriangulatorObj *); | ||||
| static GLdouble twice_the_polygon_area(tess_vertex *, tess_vertex *); | ||||
| static GLenum verify_edge_vertex_intersections(GLUtriangulatorObj *); | ||||
| void tess_find_contour_hierarchies(GLUtriangulatorObj *); | ||||
| static GLenum test_for_overlapping_contours(GLUtriangulatorObj *); | ||||
| static GLenum contours_overlap(tess_contour *, tess_polygon *); | ||||
| static GLenum is_contour_contained_in(tess_contour *, tess_contour *); | ||||
| static void add_new_exterior(GLUtriangulatorObj *, tess_contour *); | ||||
| static void add_new_interior(GLUtriangulatorObj *, tess_contour *, | ||||
| 			     tess_contour *); | ||||
| static void add_interior_with_hierarchy_check(GLUtriangulatorObj *, | ||||
| 					      tess_contour *, tess_contour *); | ||||
| static void reverse_hierarchy_and_add_exterior(GLUtriangulatorObj *, | ||||
| 					       tess_contour *, | ||||
| 					       tess_contour *); | ||||
| static GLboolean point_in_polygon(tess_contour *, GLdouble, GLdouble); | ||||
| static void shift_interior_to_exterior(GLUtriangulatorObj *, tess_contour *); | ||||
| static void add_exterior_with_check(GLUtriangulatorObj *, tess_contour *, | ||||
| 				    tess_contour *); | ||||
| static GLenum cut_out_hole(GLUtriangulatorObj *, tess_contour *, | ||||
| 			   tess_contour *); | ||||
| static GLenum merge_hole_with_contour(GLUtriangulatorObj *, | ||||
| 				      tess_contour *, tess_contour *, | ||||
| 				      tess_vertex *, tess_vertex *); | ||||
|  | ||||
| static GLenum | ||||
| find_normal(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_polygon *polygon = tobj->current_polygon; | ||||
|    tess_vertex *va, *vb, *vc; | ||||
|    GLdouble A, B, C; | ||||
|    GLdouble A0, A1, A2, B0, B1, B2; | ||||
|  | ||||
|    va = polygon->vertices; | ||||
|    vb = va->next; | ||||
|    A0 = vb->location[0] - va->location[0]; | ||||
|    A1 = vb->location[1] - va->location[1]; | ||||
|    A2 = vb->location[2] - va->location[2]; | ||||
|    for (vc = vb->next; vc != va; vc = vc->next) { | ||||
|       B0 = vc->location[0] - va->location[0]; | ||||
|       B1 = vc->location[1] - va->location[1]; | ||||
|       B2 = vc->location[2] - va->location[2]; | ||||
|       A = A1 * B2 - A2 * B1; | ||||
|       B = A2 * B0 - A0 * B2; | ||||
|       C = A0 * B1 - A1 * B0; | ||||
|       if (fabs(A) > EPSILON || fabs(B) > EPSILON || fabs(C) > EPSILON) { | ||||
| 	 polygon->A = A; | ||||
| 	 polygon->B = B; | ||||
| 	 polygon->C = C; | ||||
| 	 polygon->D = | ||||
| 	    -A * va->location[0] - B * va->location[1] - C * va->location[2]; | ||||
| 	 return GLU_NO_ERROR; | ||||
|       } | ||||
|    } | ||||
|    tess_call_user_error(tobj, GLU_TESS_ERROR7); | ||||
|    return GLU_ERROR; | ||||
| } | ||||
|  | ||||
| void | ||||
| tess_test_polygon(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_polygon *polygon = tobj->current_polygon; | ||||
|  | ||||
|    /* any vertices defined? */ | ||||
|    if (polygon->vertex_cnt < 3) { | ||||
|       free_current_polygon(polygon); | ||||
|       return; | ||||
|    } | ||||
|    /* wrap pointers */ | ||||
|    polygon->last_vertex->next = polygon->vertices; | ||||
|    polygon->vertices->previous = polygon->last_vertex; | ||||
|    /* determine the normal */ | ||||
|    if (find_normal(tobj) == GLU_ERROR) | ||||
|       return; | ||||
|    /* compare the normals of previously defined contours and this one */ | ||||
|    /* first contour define ? */ | ||||
|    if (tobj->contours == NULL) { | ||||
|       tobj->A = polygon->A; | ||||
|       tobj->B = polygon->B; | ||||
|       tobj->C = polygon->C; | ||||
|       tobj->D = polygon->D; | ||||
|       /* determine the best projection to use */ | ||||
|       if (fabs(polygon->A) > fabs(polygon->B)) | ||||
| 	 if (fabs(polygon->A) > fabs(polygon->C)) | ||||
| 	    tobj->projection = OYZ; | ||||
| 	 else | ||||
| 	    tobj->projection = OXY; | ||||
|       else if (fabs(polygon->B) > fabs(polygon->C)) | ||||
| 	 tobj->projection = OXZ; | ||||
|       else | ||||
| 	 tobj->projection = OXY; | ||||
|    } | ||||
|    else { | ||||
|       GLdouble a[3], b[3]; | ||||
|       tess_vertex *vertex = polygon->vertices; | ||||
|  | ||||
|       a[0] = tobj->A; | ||||
|       a[1] = tobj->B; | ||||
|       a[2] = tobj->C; | ||||
|       b[0] = polygon->A; | ||||
|       b[1] = polygon->B; | ||||
|       b[2] = polygon->C; | ||||
|  | ||||
|       /* compare the normals */ | ||||
|       if (fabs(a[1] * b[2] - a[2] * b[1]) > EPSILON || | ||||
| 	  fabs(a[2] * b[0] - a[0] * b[2]) > EPSILON || | ||||
| 	  fabs(a[0] * b[1] - a[1] * b[0]) > EPSILON) { | ||||
| 	 /* not coplanar */ | ||||
| 	 tess_call_user_error(tobj, GLU_TESS_ERROR9); | ||||
| 	 return; | ||||
|       } | ||||
|       /* the normals are parallel - test for plane equation */ | ||||
|       if (fabs(a[0] * vertex->location[0] + a[1] * vertex->location[1] + | ||||
| 	       a[2] * vertex->location[2] + tobj->D) > EPSILON) { | ||||
| 	 /* not the same plane */ | ||||
| 	 tess_call_user_error(tobj, GLU_TESS_ERROR9); | ||||
| 	 return; | ||||
|       } | ||||
|    } | ||||
|    prepare_projection_info(tobj); | ||||
|    if (verify_edge_vertex_intersections(tobj) == GLU_ERROR) | ||||
|       return; | ||||
|    if (test_for_overlapping_contours(tobj) == GLU_ERROR) | ||||
|       return; | ||||
|    if (store_polygon_as_contour(tobj) == GLU_ERROR) | ||||
|       return; | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| test_for_overlapping_contours(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_contour *contour; | ||||
|    tess_polygon *polygon; | ||||
|  | ||||
|    polygon = tobj->current_polygon; | ||||
|    for (contour = tobj->contours; contour != NULL; contour = contour->next) | ||||
|       if (contours_overlap(contour, polygon) != GLU_NO_ERROR) { | ||||
| 	 tess_call_user_error(tobj, GLU_TESS_ERROR5); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| store_polygon_as_contour(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_polygon *polygon = tobj->current_polygon; | ||||
|    tess_contour *contour = tobj->contours; | ||||
|  | ||||
|    /* the first contour defined */ | ||||
|    if (contour == NULL) { | ||||
|       if ((contour = (tess_contour *) malloc(sizeof(tess_contour))) == NULL) { | ||||
| 	 tess_call_user_error(tobj, GLU_OUT_OF_MEMORY); | ||||
| 	 free_current_polygon(polygon); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|       tobj->contours = tobj->last_contour = contour; | ||||
|       contour->next = contour->previous = NULL; | ||||
|    } | ||||
|    else { | ||||
|       if ((contour = (tess_contour *) malloc(sizeof(tess_contour))) == NULL) { | ||||
| 	 tess_call_user_error(tobj, GLU_OUT_OF_MEMORY); | ||||
| 	 free_current_polygon(polygon); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|       contour->previous = tobj->last_contour; | ||||
|       tobj->last_contour->next = contour; | ||||
|       tobj->last_contour = contour; | ||||
|       contour->next = NULL; | ||||
|    } | ||||
|    /* mark all vertices in new contour as not special */ | ||||
|    /* and all are boundary edges */ | ||||
|    { | ||||
|       tess_vertex *vertex; | ||||
|       GLuint vertex_cnt, i; | ||||
|  | ||||
|       for (vertex = polygon->vertices, i = 0, vertex_cnt = | ||||
| 	   polygon->vertex_cnt; i < vertex_cnt; vertex = vertex->next, i++) { | ||||
| 	 vertex->shadow_vertex = NULL; | ||||
| 	 vertex->edge_flag = GL_TRUE; | ||||
|       } | ||||
|    } | ||||
|    contour->vertex_cnt = polygon->vertex_cnt; | ||||
|    contour->area = polygon->area; | ||||
|    contour->orientation = polygon->orientation; | ||||
|    contour->type = GLU_UNKNOWN; | ||||
|    contour->vertices = polygon->vertices; | ||||
|    contour->last_vertex = polygon->last_vertex; | ||||
|    polygon->vertices = polygon->last_vertex = NULL; | ||||
|    polygon->vertex_cnt = 0; | ||||
|    ++(tobj->contour_cnt); | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static void | ||||
| free_current_polygon(tess_polygon * polygon) | ||||
| { | ||||
|    tess_vertex *vertex, *vertex_tmp; | ||||
|    GLuint i; | ||||
|  | ||||
|    /* free current_polygon structures */ | ||||
|    for (vertex = polygon->vertices, i = 0; i < polygon->vertex_cnt; i++) { | ||||
|       vertex_tmp = vertex->next; | ||||
|       free(vertex); | ||||
|       vertex = vertex_tmp; | ||||
|    } | ||||
|    polygon->vertices = polygon->last_vertex = NULL; | ||||
|    polygon->vertex_cnt = 0; | ||||
| } | ||||
|  | ||||
| static void | ||||
| prepare_projection_info(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_polygon *polygon = tobj->current_polygon; | ||||
|    tess_vertex *vertex, *last_vertex_ptr; | ||||
|    GLdouble area; | ||||
|  | ||||
|    last_vertex_ptr = polygon->last_vertex; | ||||
|    switch (tobj->projection) { | ||||
|    case OXY: | ||||
|       for (vertex = polygon->vertices; vertex != last_vertex_ptr; | ||||
| 	   vertex = vertex->next) { | ||||
| 	 vertex->x = vertex->location[0]; | ||||
| 	 vertex->y = vertex->location[1]; | ||||
|       } | ||||
|       last_vertex_ptr->x = last_vertex_ptr->location[0]; | ||||
|       last_vertex_ptr->y = last_vertex_ptr->location[1]; | ||||
|       break; | ||||
|    case OXZ: | ||||
|       for (vertex = polygon->vertices; vertex != last_vertex_ptr; | ||||
| 	   vertex = vertex->next) { | ||||
| 	 vertex->x = vertex->location[0]; | ||||
| 	 vertex->y = vertex->location[2]; | ||||
|       } | ||||
|       last_vertex_ptr->x = last_vertex_ptr->location[0]; | ||||
|       last_vertex_ptr->y = last_vertex_ptr->location[2]; | ||||
|       break; | ||||
|    case OYZ: | ||||
|       for (vertex = polygon->vertices; vertex != last_vertex_ptr; | ||||
| 	   vertex = vertex->next) { | ||||
| 	 vertex->x = vertex->location[1]; | ||||
| 	 vertex->y = vertex->location[2]; | ||||
|       } | ||||
|       last_vertex_ptr->x = last_vertex_ptr->location[1]; | ||||
|       last_vertex_ptr->y = last_vertex_ptr->location[2]; | ||||
|       break; | ||||
|    } | ||||
|    area = twice_the_polygon_area(polygon->vertices, polygon->last_vertex); | ||||
|    if (area >= 0.0) { | ||||
|       polygon->orientation = GLU_CCW; | ||||
|       polygon->area = area; | ||||
|    } | ||||
|    else { | ||||
|       polygon->orientation = GLU_CW; | ||||
|       polygon->area = -area; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static GLdouble | ||||
| twice_the_polygon_area(tess_vertex * vertex, tess_vertex * last_vertex) | ||||
| { | ||||
|    tess_vertex *next; | ||||
|    GLdouble area, x, y; | ||||
|  | ||||
|    area = 0.0; | ||||
|    x = vertex->x; | ||||
|    y = vertex->y; | ||||
|    vertex = vertex->next; | ||||
|    for (; vertex != last_vertex; vertex = vertex->next) { | ||||
|       next = vertex->next; | ||||
|       area += | ||||
| 	 (vertex->x - x) * (next->y - y) - (vertex->y - y) * (next->x - x); | ||||
|    } | ||||
|    return area; | ||||
| } | ||||
|  | ||||
| /* test if edges ab and cd intersect */ | ||||
| /* if not return GLU_NO_ERROR, else if cross return GLU_TESS_ERROR8, */ | ||||
| /* else if adjacent return GLU_TESS_ERROR4 */ | ||||
| static GLenum | ||||
| edge_edge_intersect(tess_vertex * a, | ||||
| 		    tess_vertex * b, tess_vertex * c, tess_vertex * d) | ||||
| { | ||||
|    GLdouble denom, r, s; | ||||
|    GLdouble xba, ydc, yba, xdc, yac, xac; | ||||
|  | ||||
|    xba = b->x - a->x; | ||||
|    yba = b->y - a->y; | ||||
|    xdc = d->x - c->x; | ||||
|    ydc = d->y - c->y; | ||||
|    xac = a->x - c->x; | ||||
|    yac = a->y - c->y; | ||||
|    denom = xba * ydc - yba * xdc; | ||||
|    r = yac * xdc - xac * ydc; | ||||
|    /* parallel? */ | ||||
|    if (fabs(denom) < EPSILON) { | ||||
|       if (fabs(r) < EPSILON) { | ||||
| 	 /* colinear */ | ||||
| 	 if (fabs(xba) < EPSILON) { | ||||
| 	    /* compare the Y coordinate */ | ||||
| 	    if (yba > 0.0) { | ||||
| 	       if ( | ||||
| 		   (fabs(a->y - c->y) < EPSILON | ||||
| 		    && fabs(c->y - b->y) < EPSILON) | ||||
| 		   || (fabs(a->y - d->y) < EPSILON | ||||
| 		       && fabs(d->y - b->y) < | ||||
| 		       EPSILON)) return GLU_TESS_ERROR4; | ||||
|  | ||||
| 	    } | ||||
| 	    else { | ||||
| 	       if ( | ||||
| 		   (fabs(b->y - c->y) < EPSILON | ||||
| 		    && fabs(c->y - a->y) < EPSILON) | ||||
| 		   || (fabs(b->y - d->y) < EPSILON | ||||
| 		       && fabs(d->y - a->y) < | ||||
| 		       EPSILON)) return GLU_TESS_ERROR4; | ||||
| 	    } | ||||
| 	 } | ||||
| 	 else { | ||||
| 	    /* compare the X coordinate */ | ||||
| 	    if (xba > 0.0) { | ||||
| 	       if ( | ||||
| 		   (fabs(a->x - c->x) < EPSILON | ||||
| 		    && fabs(c->x - b->x) < EPSILON) | ||||
| 		   || (fabs(a->x - d->x) < EPSILON | ||||
| 		       && fabs(d->x - b->x) < | ||||
| 		       EPSILON)) return GLU_TESS_ERROR4; | ||||
| 	    } | ||||
| 	    else { | ||||
| 	       if ( | ||||
| 		   (fabs(b->x - c->x) < EPSILON | ||||
| 		    && fabs(c->x - a->x) < EPSILON) | ||||
| 		   || (fabs(b->x - d->x) < EPSILON | ||||
| 		       && fabs(d->x - a->x) < | ||||
| 		       EPSILON)) return GLU_TESS_ERROR4; | ||||
| 	    } | ||||
| 	 } | ||||
|       } | ||||
|       return GLU_NO_ERROR; | ||||
|    } | ||||
|    r /= denom; | ||||
|    s = (yac * xba - xac * yba) / denom; | ||||
|    /* test if one vertex lies on other edge */ | ||||
|    if (((fabs(r) < EPSILON || (r < 1.0 + EPSILON && r > 1.0 - EPSILON)) && | ||||
| 	s > -EPSILON && s < 1.0 + EPSILON) || | ||||
|        ((fabs(s) < EPSILON || (s < 1.0 + EPSILON && s > 1.0 - EPSILON)) && | ||||
| 	r > -EPSILON && r < 1.0 + EPSILON)) { | ||||
|       return GLU_TESS_ERROR4; | ||||
|    } | ||||
|    /* test for crossing */ | ||||
|    if (r > -EPSILON && r < 1.0 + EPSILON && s > -EPSILON && s < 1.0 + EPSILON) { | ||||
|       return GLU_TESS_ERROR8; | ||||
|    } | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| verify_edge_vertex_intersections(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_polygon *polygon = tobj->current_polygon; | ||||
|    tess_vertex *vertex1, *last_vertex, *vertex2; | ||||
|    GLenum test; | ||||
|  | ||||
|    last_vertex = polygon->last_vertex; | ||||
|    vertex1 = last_vertex; | ||||
|    for (vertex2 = vertex1->next->next; | ||||
| 	vertex2->next != last_vertex; vertex2 = vertex2->next) { | ||||
|       test = edge_edge_intersect(vertex1, vertex1->next, vertex2, | ||||
| 				 vertex2->next); | ||||
|       if (test != GLU_NO_ERROR) { | ||||
| 	 tess_call_user_error(tobj, test); | ||||
| 	 return GLU_ERROR; | ||||
|       } | ||||
|    } | ||||
|    for (vertex1 = polygon->vertices; | ||||
| 	vertex1->next->next != last_vertex; vertex1 = vertex1->next) { | ||||
|       for (vertex2 = vertex1->next->next; | ||||
| 	   vertex2 != last_vertex; vertex2 = vertex2->next) { | ||||
| 	 test = edge_edge_intersect(vertex1, vertex1->next, vertex2, | ||||
| 				    vertex2->next); | ||||
| 	 if (test != GLU_NO_ERROR) { | ||||
| 	    tess_call_user_error(tobj, test); | ||||
| 	    return GLU_ERROR; | ||||
| 	 } | ||||
|       } | ||||
|    } | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static int | ||||
| #ifdef WIN32 | ||||
|   __cdecl | ||||
| #endif | ||||
| area_compare(const void *a, const void *b) | ||||
| { | ||||
|    GLdouble area1, area2; | ||||
|  | ||||
|    area1 = (*((tess_contour **) a))->area; | ||||
|    area2 = (*((tess_contour **) b))->area; | ||||
|    if (area1 < area2) | ||||
|       return 1; | ||||
|    if (area1 > area2) | ||||
|       return -1; | ||||
|    return 0; | ||||
| } | ||||
|  | ||||
| void | ||||
| tess_find_contour_hierarchies(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_contour **contours;	/* dinamic array of pointers */ | ||||
|    tess_contour *tmp_contour_ptr = tobj->contours; | ||||
|    GLuint cnt, i; | ||||
|    GLenum result; | ||||
|    GLboolean hierarchy_changed; | ||||
|  | ||||
|    /* any contours? */ | ||||
|    if (tobj->contour_cnt < 2) { | ||||
|       tobj->contours->type = GLU_EXTERIOR; | ||||
|       return; | ||||
|    } | ||||
|    if ((contours = (tess_contour **) | ||||
| 	malloc(sizeof(tess_contour *) * (tobj->contour_cnt))) == NULL) { | ||||
|       tess_call_user_error(tobj, GLU_OUT_OF_MEMORY); | ||||
|       return; | ||||
|    } | ||||
|    for (tmp_contour_ptr = tobj->contours, cnt = 0; | ||||
| 	tmp_contour_ptr != NULL; tmp_contour_ptr = tmp_contour_ptr->next) | ||||
|       contours[cnt++] = tmp_contour_ptr; | ||||
|    /* now sort the contours in decreasing area size order */ | ||||
|    qsort((void *) contours, (size_t) cnt, (size_t) sizeof(tess_contour *), | ||||
| 	 area_compare); | ||||
|    /* we leave just the first contour - remove others from list */ | ||||
|    tobj->contours = contours[0]; | ||||
|    tobj->contours->next = tobj->contours->previous = NULL; | ||||
|    tobj->last_contour = tobj->contours; | ||||
|    tobj->contour_cnt = 1; | ||||
|    /* first contour is the one with greatest area */ | ||||
|    /* must be EXTERIOR */ | ||||
|    tobj->contours->type = GLU_EXTERIOR; | ||||
|    tmp_contour_ptr = tobj->contours; | ||||
|    /* now we play! */ | ||||
|    for (i = 1; i < cnt; i++) { | ||||
|       hierarchy_changed = GL_FALSE; | ||||
|       for (tmp_contour_ptr = tobj->contours; | ||||
| 	   tmp_contour_ptr != NULL; tmp_contour_ptr = tmp_contour_ptr->next) { | ||||
| 	 if (tmp_contour_ptr->type == GLU_EXTERIOR) { | ||||
| 	    /* check if contour completely contained in EXTERIOR */ | ||||
| 	    result = is_contour_contained_in(tmp_contour_ptr, contours[i]); | ||||
| 	    switch (result) { | ||||
| 	    case GLU_INTERIOR: | ||||
| 	       /* now we have to check if contour is inside interiors */ | ||||
| 	       /* or not */ | ||||
| 	       /* any interiors? */ | ||||
| 	       if (tmp_contour_ptr->next != NULL && | ||||
| 		   tmp_contour_ptr->next->type == GLU_INTERIOR) { | ||||
| 		  /* for all interior, check if inside any of them */ | ||||
| 		  /* if not inside any of interiors, its another */ | ||||
| 		  /* interior */ | ||||
| 		  /* or it may contain some interiors, then change */ | ||||
| 		  /* the contained interiors to exterior ones */ | ||||
| 		  add_interior_with_hierarchy_check(tobj, | ||||
| 						    tmp_contour_ptr, | ||||
| 						    contours[i]); | ||||
| 	       } | ||||
| 	       else { | ||||
| 		  /* not in interior, add as new interior contour */ | ||||
| 		  add_new_interior(tobj, tmp_contour_ptr, contours[i]); | ||||
| 	       } | ||||
| 	       hierarchy_changed = GL_TRUE; | ||||
| 	       break; | ||||
| 	    case GLU_EXTERIOR: | ||||
| 	       /* ooops, the marked as EXTERIOR (contours[i]) is */ | ||||
| 	       /* actually an interior of tmp_contour_ptr */ | ||||
| 	       /*  reverse the local hierarchy */ | ||||
| 	       reverse_hierarchy_and_add_exterior(tobj, tmp_contour_ptr, | ||||
| 						  contours[i]); | ||||
| 	       hierarchy_changed = GL_TRUE; | ||||
| 	       break; | ||||
| 	    case GLU_NO_ERROR: | ||||
| 	       break; | ||||
| 	    default: | ||||
| 	       abort(); | ||||
| 	    } | ||||
| 	 } | ||||
| 	 if (hierarchy_changed) | ||||
| 	    break;		/* break from for loop */ | ||||
|       } | ||||
|       if (hierarchy_changed == GL_FALSE) { | ||||
| 	 /* disjoint with all contours, add to contour list */ | ||||
| 	 add_new_exterior(tobj, contours[i]); | ||||
|       } | ||||
|    } | ||||
|    free(contours); | ||||
| } | ||||
|  | ||||
| /* returns GLU_INTERIOR if inner is completey enclosed within outer */ | ||||
| /* returns GLU_EXTERIOR if outer is completely enclosed within inner */ | ||||
| /* returns GLU_NO_ERROR if contours are disjoint */ | ||||
| static GLenum | ||||
| is_contour_contained_in(tess_contour * outer, tess_contour * inner) | ||||
| { | ||||
|    GLenum relation_flag; | ||||
|  | ||||
|    /* set relation_flag to relation of containment of first inner vertex */ | ||||
|    /* regarding outer contour */ | ||||
|    if (point_in_polygon(outer, inner->vertices->x, inner->vertices->y)) | ||||
|       relation_flag = GLU_INTERIOR; | ||||
|    else | ||||
|       relation_flag = GLU_EXTERIOR; | ||||
|    if (relation_flag == GLU_INTERIOR) | ||||
|       return GLU_INTERIOR; | ||||
|    if (point_in_polygon(inner, outer->vertices->x, outer->vertices->y)) | ||||
|       return GLU_EXTERIOR; | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static GLboolean | ||||
| point_in_polygon(tess_contour * contour, GLdouble x, GLdouble y) | ||||
| { | ||||
|    tess_vertex *v1, *v2; | ||||
|    GLuint i, vertex_cnt; | ||||
|    GLdouble xp1, yp1, xp2, yp2; | ||||
|    GLboolean tst; | ||||
|  | ||||
|    tst = GL_FALSE; | ||||
|    v1 = contour->vertices; | ||||
|    v2 = contour->vertices->previous; | ||||
|    for (i = 0, vertex_cnt = contour->vertex_cnt; i < vertex_cnt; i++) { | ||||
|       xp1 = v1->x; | ||||
|       yp1 = v1->y; | ||||
|       xp2 = v2->x; | ||||
|       yp2 = v2->y; | ||||
|       if ((((yp1 <= y) && (y < yp2)) || ((yp2 <= y) && (y < yp1))) && | ||||
| 	  (x < (xp2 - xp1) * (y - yp1) / (yp2 - yp1) + xp1)) | ||||
| 	 tst = (tst == GL_FALSE ? GL_TRUE : GL_FALSE); | ||||
|       v2 = v1; | ||||
|       v1 = v1->next; | ||||
|    } | ||||
|    return tst; | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| contours_overlap(tess_contour * contour, tess_polygon * polygon) | ||||
| { | ||||
|    tess_vertex *vertex1, *vertex2; | ||||
|    GLuint vertex1_cnt, vertex2_cnt, i, j; | ||||
|    GLenum test; | ||||
|  | ||||
|    vertex1 = contour->vertices; | ||||
|    vertex2 = polygon->vertices; | ||||
|    vertex1_cnt = contour->vertex_cnt; | ||||
|    vertex2_cnt = polygon->vertex_cnt; | ||||
|    for (i = 0; i < vertex1_cnt; vertex1 = vertex1->next, i++) { | ||||
|       for (j = 0; j < vertex2_cnt; vertex2 = vertex2->next, j++) | ||||
| 	 if ((test = edge_edge_intersect(vertex1, vertex1->next, vertex2, | ||||
| 					 vertex2->next)) != GLU_NO_ERROR) | ||||
| 	    return test; | ||||
|    } | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_new_exterior(GLUtriangulatorObj * tobj, tess_contour * contour) | ||||
| { | ||||
|    contour->type = GLU_EXTERIOR; | ||||
|    contour->next = NULL; | ||||
|    contour->previous = tobj->last_contour; | ||||
|    tobj->last_contour->next = contour; | ||||
|    tobj->last_contour = contour; | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_new_interior(GLUtriangulatorObj * tobj, | ||||
| 		 tess_contour * outer, tess_contour * contour) | ||||
| { | ||||
|    contour->type = GLU_INTERIOR; | ||||
|    contour->next = outer->next; | ||||
|    contour->previous = outer; | ||||
|    if (outer->next != NULL) | ||||
|       outer->next->previous = contour; | ||||
|    outer->next = contour; | ||||
|    if (tobj->last_contour == outer) | ||||
|       tobj->last_contour = contour; | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_interior_with_hierarchy_check(GLUtriangulatorObj * tobj, | ||||
| 				  tess_contour * outer, | ||||
| 				  tess_contour * contour) | ||||
| { | ||||
|    tess_contour *ptr; | ||||
|  | ||||
|    /* for all interiors of outer check if they are interior of contour */ | ||||
|    /* if so, change that interior to exterior and move it of of the */ | ||||
|    /* interior sequence */ | ||||
|    if (outer->next != NULL && outer->next->type == GLU_INTERIOR) { | ||||
|       GLenum test; | ||||
|  | ||||
|       for (ptr = outer->next; ptr != NULL && ptr->type == GLU_INTERIOR; | ||||
| 	   ptr = ptr->next) { | ||||
| 	 test = is_contour_contained_in(ptr, contour); | ||||
| 	 switch (test) { | ||||
| 	 case GLU_INTERIOR: | ||||
| 	    /* contour is contained in one of the interiors */ | ||||
| 	    /* check if possibly contained in other exteriors */ | ||||
| 	    /* move ptr to first EXTERIOR */ | ||||
| 	    for (; ptr != NULL && ptr->type == GLU_INTERIOR; ptr = ptr->next); | ||||
| 	    if (ptr == NULL) | ||||
| 	       /* another exterior */ | ||||
| 	       add_new_exterior(tobj, contour); | ||||
| 	    else | ||||
| 	       add_exterior_with_check(tobj, ptr, contour); | ||||
| 	    return; | ||||
| 	 case GLU_EXTERIOR: | ||||
| 	    /* one of the interiors is contained in the contour */ | ||||
| 	    /* change it to EXTERIOR, and shift it away from the */ | ||||
| 	    /* interior sequence */ | ||||
| 	    shift_interior_to_exterior(tobj, ptr); | ||||
| 	    break; | ||||
| 	 case GLU_NO_ERROR: | ||||
| 	    /* disjoint */ | ||||
| 	    break; | ||||
| 	 default: | ||||
| 	    abort(); | ||||
| 	 } | ||||
|       } | ||||
|    } | ||||
|    /* add contour to the interior sequence */ | ||||
|    add_new_interior(tobj, outer, contour); | ||||
| } | ||||
|  | ||||
| static void | ||||
| reverse_hierarchy_and_add_exterior(GLUtriangulatorObj * tobj, | ||||
| 				   tess_contour * outer, | ||||
| 				   tess_contour * contour) | ||||
| { | ||||
|    tess_contour *ptr; | ||||
|  | ||||
|    /* reverse INTERIORS to EXTERIORS */ | ||||
|    /* any INTERIORS? */ | ||||
|    if (outer->next != NULL && outer->next->type == GLU_INTERIOR) | ||||
|       for (ptr = outer->next; ptr != NULL && ptr->type == GLU_INTERIOR; | ||||
| 	   ptr = ptr->next) ptr->type = GLU_EXTERIOR; | ||||
|    /* the outer now becomes inner */ | ||||
|    outer->type = GLU_INTERIOR; | ||||
|    /* contour is the EXTERIOR */ | ||||
|    contour->next = outer; | ||||
|    if (tobj->contours == outer) { | ||||
|       /* first contour beeing reversed */ | ||||
|       contour->previous = NULL; | ||||
|       tobj->contours = contour; | ||||
|    } | ||||
|    else { | ||||
|       outer->previous->next = contour; | ||||
|       contour->previous = outer->previous; | ||||
|    } | ||||
|    outer->previous = contour; | ||||
| } | ||||
|  | ||||
| static void | ||||
| shift_interior_to_exterior(GLUtriangulatorObj * tobj, tess_contour * contour) | ||||
| { | ||||
|    contour->previous->next = contour->next; | ||||
|    if (contour->next != NULL) | ||||
|       contour->next->previous = contour->previous; | ||||
|    else | ||||
|       tobj->last_contour = contour->previous; | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_exterior_with_check(GLUtriangulatorObj * tobj, | ||||
| 			tess_contour * outer, tess_contour * contour) | ||||
| { | ||||
|    GLenum test; | ||||
|  | ||||
|    /* this contour might be interior to further exteriors - check */ | ||||
|    /* if not, just add as a new exterior */ | ||||
|    for (; outer != NULL && outer->type == GLU_EXTERIOR; outer = outer->next) { | ||||
|       test = is_contour_contained_in(outer, contour); | ||||
|       switch (test) { | ||||
|       case GLU_INTERIOR: | ||||
| 	 /* now we have to check if contour is inside interiors */ | ||||
| 	 /* or not */ | ||||
| 	 /* any interiors? */ | ||||
| 	 if (outer->next != NULL && outer->next->type == GLU_INTERIOR) { | ||||
| 	    /* for all interior, check if inside any of them */ | ||||
| 	    /* if not inside any of interiors, its another */ | ||||
| 	    /* interior */ | ||||
| 	    /* or it may contain some interiors, then change */ | ||||
| 	    /* the contained interiors to exterior ones */ | ||||
| 	    add_interior_with_hierarchy_check(tobj, outer, contour); | ||||
| 	 } | ||||
| 	 else { | ||||
| 	    /* not in interior, add as new interior contour */ | ||||
| 	    add_new_interior(tobj, outer, contour); | ||||
| 	 } | ||||
| 	 return; | ||||
|       case GLU_NO_ERROR: | ||||
| 	 /* disjoint */ | ||||
| 	 break; | ||||
|       default: | ||||
| 	 abort(); | ||||
|       } | ||||
|    } | ||||
|    /* add contour to the exterior sequence */ | ||||
|    add_new_exterior(tobj, contour); | ||||
| } | ||||
|  | ||||
| void | ||||
| tess_handle_holes(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_contour *contour, *hole; | ||||
|    GLenum exterior_orientation; | ||||
|  | ||||
|    /* verify hole orientation */ | ||||
|    for (contour = tobj->contours; contour != NULL;) { | ||||
|       exterior_orientation = contour->orientation; | ||||
|       for (contour = contour->next; | ||||
| 	   contour != NULL && contour->type == GLU_INTERIOR; | ||||
| 	   contour = contour->next) { | ||||
| 	 if (contour->orientation == exterior_orientation) { | ||||
| 	    tess_call_user_error(tobj, GLU_TESS_ERROR5); | ||||
| 	    return; | ||||
| 	 } | ||||
|       } | ||||
|    } | ||||
|    /* now cut-out holes */ | ||||
|    for (contour = tobj->contours; contour != NULL;) { | ||||
|       hole = contour->next; | ||||
|       while (hole != NULL && hole->type == GLU_INTERIOR) { | ||||
| 	 if (cut_out_hole(tobj, contour, hole) == GLU_ERROR) | ||||
| 	    return; | ||||
| 	 hole = contour->next; | ||||
|       } | ||||
|       contour = contour->next; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| cut_out_hole(GLUtriangulatorObj * tobj, | ||||
| 	     tess_contour * contour, tess_contour * hole) | ||||
| { | ||||
|    tess_contour *tmp_hole; | ||||
|    tess_vertex *v1, *v2, *tmp_vertex; | ||||
|    GLuint vertex1_cnt, vertex2_cnt, tmp_vertex_cnt; | ||||
|    GLuint i, j, k; | ||||
|    GLenum test; | ||||
|  | ||||
|    /* find an edge connecting contour and hole not intersecting any other */ | ||||
|    /* edge belonging to either the contour or any of the other holes */ | ||||
|    for (v1 = contour->vertices, vertex1_cnt = contour->vertex_cnt, i = 0; | ||||
| 	i < vertex1_cnt; i++, v1 = v1->next) { | ||||
|       for (v2 = hole->vertices, vertex2_cnt = hole->vertex_cnt, j = 0; | ||||
| 	   j < vertex2_cnt; j++, v2 = v2->next) { | ||||
| 	 /* does edge (v1,v2) intersect any edge of contour */ | ||||
| 	 for (tmp_vertex = contour->vertices, tmp_vertex_cnt = | ||||
| 	      contour->vertex_cnt, k = 0; k < tmp_vertex_cnt; | ||||
| 	      tmp_vertex = tmp_vertex->next, k++) { | ||||
| 	    /* skip edge tests for edges directly connected */ | ||||
| 	    if (v1 == tmp_vertex || v1 == tmp_vertex->next) | ||||
| 	       continue; | ||||
| 	    test = edge_edge_intersect(v1, v2, tmp_vertex, tmp_vertex->next); | ||||
| 	    if (test != GLU_NO_ERROR) | ||||
| 	       break; | ||||
| 	 } | ||||
| 	 if (test == GLU_NO_ERROR) { | ||||
| 	    /* does edge (v1,v2) intersect any edge of hole */ | ||||
| 	    for (tmp_vertex = hole->vertices, | ||||
| 		 tmp_vertex_cnt = hole->vertex_cnt, k = 0; | ||||
| 		 k < tmp_vertex_cnt; tmp_vertex = tmp_vertex->next, k++) { | ||||
| 	       /* skip edge tests for edges directly connected */ | ||||
| 	       if (v2 == tmp_vertex || v2 == tmp_vertex->next) | ||||
| 		  continue; | ||||
| 	       test = | ||||
| 		  edge_edge_intersect(v1, v2, tmp_vertex, tmp_vertex->next); | ||||
| 	       if (test != GLU_NO_ERROR) | ||||
| 		  break; | ||||
| 	    } | ||||
| 	    if (test == GLU_NO_ERROR) { | ||||
| 	       /* does edge (v1,v2) intersect any other hole? */ | ||||
| 	       for (tmp_hole = hole->next; | ||||
| 		    tmp_hole != NULL && tmp_hole->type == GLU_INTERIOR; | ||||
| 		    tmp_hole = tmp_hole->next) { | ||||
| 		  /* does edge (v1,v2) intersect any edge of hole */ | ||||
| 		  for (tmp_vertex = tmp_hole->vertices, | ||||
| 		       tmp_vertex_cnt = tmp_hole->vertex_cnt, k = 0; | ||||
| 		       k < tmp_vertex_cnt; tmp_vertex = tmp_vertex->next, k++) { | ||||
| 		     test = edge_edge_intersect(v1, v2, tmp_vertex, | ||||
| 						tmp_vertex->next); | ||||
| 		     if (test != GLU_NO_ERROR) | ||||
| 			break; | ||||
| 		  } | ||||
| 		  if (test != GLU_NO_ERROR) | ||||
| 		     break; | ||||
| 	       } | ||||
| 	    } | ||||
| 	 } | ||||
| 	 if (test == GLU_NO_ERROR) { | ||||
| 	    /* edge (v1,v2) is good for eliminating the hole */ | ||||
| 	    if (merge_hole_with_contour(tobj, contour, hole, v1, v2) | ||||
| 		== GLU_NO_ERROR) | ||||
| 	       return GLU_NO_ERROR; | ||||
| 	    else | ||||
| 	       return GLU_ERROR; | ||||
| 	 } | ||||
|       } | ||||
|    } | ||||
|    /* other holes are blocking all possible connections of hole */ | ||||
|    /* with contour, we shift this hole as the last hole and retry */ | ||||
|    for (tmp_hole = hole; | ||||
| 	tmp_hole != NULL && tmp_hole->type == GLU_INTERIOR; | ||||
| 	tmp_hole = tmp_hole->next); | ||||
|    contour->next = hole->next; | ||||
|    hole->next->previous = contour; | ||||
|    if (tmp_hole == NULL) { | ||||
|       /* last EXTERIOR contour, shift hole as last contour */ | ||||
|       hole->next = NULL; | ||||
|       hole->previous = tobj->last_contour; | ||||
|       tobj->last_contour->next = hole; | ||||
|       tobj->last_contour = hole; | ||||
|    } | ||||
|    else { | ||||
|       tmp_hole->previous->next = hole; | ||||
|       hole->previous = tmp_hole->previous; | ||||
|       tmp_hole->previous = hole; | ||||
|       hole->next = tmp_hole; | ||||
|    } | ||||
|    hole = contour->next; | ||||
|    /* try once again - recurse */ | ||||
|    return cut_out_hole(tobj, contour, hole); | ||||
| } | ||||
|  | ||||
| static GLenum | ||||
| merge_hole_with_contour(GLUtriangulatorObj * tobj, | ||||
| 			tess_contour * contour, | ||||
| 			tess_contour * hole, | ||||
| 			tess_vertex * v1, tess_vertex * v2) | ||||
| { | ||||
|    tess_vertex *v1_new, *v2_new; | ||||
|  | ||||
|    /* make copies of v1 and v2, place them respectively after their originals */ | ||||
|    if ((v1_new = (tess_vertex *) malloc(sizeof(tess_vertex))) == NULL) { | ||||
|       tess_call_user_error(tobj, GLU_OUT_OF_MEMORY); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    if ((v2_new = (tess_vertex *) malloc(sizeof(tess_vertex))) == NULL) { | ||||
|       tess_call_user_error(tobj, GLU_OUT_OF_MEMORY); | ||||
|       return GLU_ERROR; | ||||
|    } | ||||
|    v1_new->edge_flag = GL_TRUE; | ||||
|    v1_new->data = v1->data; | ||||
|    v1_new->location[0] = v1->location[0]; | ||||
|    v1_new->location[1] = v1->location[1]; | ||||
|    v1_new->location[2] = v1->location[2]; | ||||
|    v1_new->x = v1->x; | ||||
|    v1_new->y = v1->y; | ||||
|    v1_new->shadow_vertex = v1; | ||||
|    v1->shadow_vertex = v1_new; | ||||
|    v1_new->next = v1->next; | ||||
|    v1_new->previous = v1; | ||||
|    v1->next->previous = v1_new; | ||||
|    v1->next = v1_new; | ||||
|    v2_new->edge_flag = GL_TRUE; | ||||
|    v2_new->data = v2->data; | ||||
|    v2_new->location[0] = v2->location[0]; | ||||
|    v2_new->location[1] = v2->location[1]; | ||||
|    v2_new->location[2] = v2->location[2]; | ||||
|    v2_new->x = v2->x; | ||||
|    v2_new->y = v2->y; | ||||
|    v2_new->shadow_vertex = v2; | ||||
|    v2->shadow_vertex = v2_new; | ||||
|    v2_new->next = v2->next; | ||||
|    v2_new->previous = v2; | ||||
|    v2->next->previous = v2_new; | ||||
|    v2->next = v2_new; | ||||
|    /* link together the two lists */ | ||||
|    v1->next = v2_new; | ||||
|    v2_new->previous = v1; | ||||
|    v2->next = v1_new; | ||||
|    v1_new->previous = v2; | ||||
|    /* update the vertex count of the contour */ | ||||
|    contour->vertex_cnt += hole->vertex_cnt + 2; | ||||
|    /* remove the INTERIOR contour */ | ||||
|    contour->next = hole->next; | ||||
|    if (hole->next != NULL) | ||||
|       hole->next->previous = contour; | ||||
|    free(hole); | ||||
|    /* update tobj structure */ | ||||
|    --(tobj->contour_cnt); | ||||
|    if (contour->last_vertex == v1) | ||||
|       contour->last_vertex = v1_new; | ||||
|    /* mark two vertices with edge_flag */ | ||||
|    v2->edge_flag = GL_FALSE; | ||||
|    v1->edge_flag = GL_FALSE; | ||||
|    return GLU_NO_ERROR; | ||||
| } | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: project.c,v 1.2 1999/09/14 00:10:31 brianp Exp $ */ | ||||
| /* $Id: project.c,v 1.2.2.1 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Copyright (C) 1995-1999  Brian Paul | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,38 +21,6 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * $Log: project.c,v $ | ||||
|  * Revision 1.2  1999/09/14 00:10:31  brianp | ||||
|  * added gluUnProject4() | ||||
|  * | ||||
|  * Revision 1.1.1.1  1999/08/19 00:55:42  jtg | ||||
|  * Imported sources | ||||
|  * | ||||
|  * Revision 1.7  1999/01/03 03:23:15  brianp | ||||
|  * now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump) | ||||
|  * | ||||
|  * Revision 1.6  1998/07/08 01:43:43  brianp | ||||
|  * new version of invert_matrix()  (also in src/matrix.c) | ||||
|  * | ||||
|  * Revision 1.5  1997/07/24 01:28:44  brianp | ||||
|  * changed precompiled header symbol from PCH to PC_HEADER | ||||
|  * | ||||
|  * Revision 1.4  1997/05/28 02:29:38  brianp | ||||
|  * added support for precompiled headers (PCH), inserted APIENTRY keyword | ||||
|  * | ||||
|  * Revision 1.3  1997/04/11 23:22:42  brianp | ||||
|  * added divide by zero checks to gluProject() and gluUnproject() | ||||
|  * | ||||
|  * Revision 1.2  1997/01/29 19:05:29  brianp | ||||
|  * faster invert_matrix() function from Stephane Rehel | ||||
|  * | ||||
|  * Revision 1.1  1996/09/27 01:19:39  brianp | ||||
|  * Initial revision | ||||
|  * | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifdef PC_HEADER | ||||
| #include "all.h" | ||||
| #else | ||||
| @@ -81,14 +49,18 @@ | ||||
|  *         in - the 4x1 vector | ||||
|  * Output:  out - the resulting 4x1 vector. | ||||
|  */ | ||||
| static void transform_point( GLdouble out[4], const GLdouble m[16], | ||||
| 			     const GLdouble in[4] ) | ||||
| static void | ||||
| transform_point(GLdouble out[4], const GLdouble m[16], const GLdouble in[4]) | ||||
| { | ||||
| #define M(row,col)  m[col*4+row] | ||||
|    out[0] = M(0,0) * in[0] + M(0,1) * in[1] + M(0,2) * in[2] + M(0,3) * in[3]; | ||||
|    out[1] = M(1,0) * in[0] + M(1,1) * in[1] + M(1,2) * in[2] + M(1,3) * in[3]; | ||||
|    out[2] = M(2,0) * in[0] + M(2,1) * in[1] + M(2,2) * in[2] + M(2,3) * in[3]; | ||||
|    out[3] = M(3,0) * in[0] + M(3,1) * in[1] + M(3,2) * in[2] + M(3,3) * in[3]; | ||||
|    out[0] = | ||||
|       M(0, 0) * in[0] + M(0, 1) * in[1] + M(0, 2) * in[2] + M(0, 3) * in[3]; | ||||
|    out[1] = | ||||
|       M(1, 0) * in[0] + M(1, 1) * in[1] + M(1, 2) * in[2] + M(1, 3) * in[3]; | ||||
|    out[2] = | ||||
|       M(2, 0) * in[0] + M(2, 1) * in[1] + M(2, 2) * in[2] + M(2, 3) * in[3]; | ||||
|    out[3] = | ||||
|       M(3, 0) * in[0] + M(3, 1) * in[1] + M(3, 2) * in[2] + M(3, 3) * in[3]; | ||||
| #undef M | ||||
| } | ||||
|  | ||||
| @@ -100,7 +72,8 @@ static void transform_point( GLdouble out[4], const GLdouble m[16], | ||||
|  * Input:  a, b - matrices to multiply | ||||
|  * Output:  product - product of a and b | ||||
|  */ | ||||
| static void matmul( GLdouble *product, const GLdouble *a, const GLdouble *b ) | ||||
| static void | ||||
| matmul(GLdouble * product, const GLdouble * a, const GLdouble * b) | ||||
| { | ||||
|    /* This matmul was contributed by Thomas Malik */ | ||||
|    GLdouble temp[16]; | ||||
| @@ -111,18 +84,29 @@ static void matmul( GLdouble *product, const GLdouble *a, const GLdouble *b ) | ||||
| #define T(row,col)  temp[(col<<2)+row] | ||||
|  | ||||
|    /* i-te Zeile */ | ||||
|    for (i = 0; i < 4; i++) | ||||
|      { | ||||
| 	T(i, 0) = A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) * B(2, 0) + A(i, 3) * B(3, 0); | ||||
| 	T(i, 1) = A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) * B(2, 1) + A(i, 3) * B(3, 1); | ||||
| 	T(i, 2) = A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) * B(2, 2) + A(i, 3) * B(3, 2); | ||||
| 	T(i, 3) = A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) * B(2, 3) + A(i, 3) * B(3, 3); | ||||
|      } | ||||
|    for (i = 0; i < 4; i++) { | ||||
|       T(i, 0) = | ||||
| 	 A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) * B(2, 0) + A(i, | ||||
| 								       3) * | ||||
| 	 B(3, 0); | ||||
|       T(i, 1) = | ||||
| 	 A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) * B(2, 1) + A(i, | ||||
| 								       3) * | ||||
| 	 B(3, 1); | ||||
|       T(i, 2) = | ||||
| 	 A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) * B(2, 2) + A(i, | ||||
| 								       3) * | ||||
| 	 B(3, 2); | ||||
|       T(i, 3) = | ||||
| 	 A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) * B(2, 3) + A(i, | ||||
| 								       3) * | ||||
| 	 B(3, 3); | ||||
|    } | ||||
|  | ||||
| #undef A | ||||
| #undef B | ||||
| #undef T | ||||
|    MEMCPY( product, temp, 16*sizeof(GLdouble) ); | ||||
|    MEMCPY(product, temp, 16 * sizeof(GLdouble)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -132,118 +116,175 @@ static void matmul( GLdouble *product, const GLdouble *a, const GLdouble *b ) | ||||
|  * Code contributed by Jacques Leroy jle@star.be | ||||
|  * Return GL_TRUE for success, GL_FALSE for failure (singular matrix) | ||||
|  */ | ||||
| static GLboolean invert_matrix( const GLdouble *m, GLdouble *out ) | ||||
| static GLboolean | ||||
| invert_matrix(const GLdouble * m, GLdouble * out) | ||||
| { | ||||
| /* NB. OpenGL Matrices are COLUMN major. */ | ||||
| #define SWAP_ROWS(a, b) { GLdouble *_tmp = a; (a)=(b); (b)=_tmp; } | ||||
| #define MAT(m,r,c) (m)[(c)*4+(r)] | ||||
|  | ||||
|  GLdouble wtmp[4][8]; | ||||
|  GLdouble m0, m1, m2, m3, s; | ||||
|  GLdouble *r0, *r1, *r2, *r3; | ||||
|    GLdouble wtmp[4][8]; | ||||
|    GLdouble m0, m1, m2, m3, s; | ||||
|    GLdouble *r0, *r1, *r2, *r3; | ||||
|  | ||||
|  r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3]; | ||||
|    r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3]; | ||||
|  | ||||
|  r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1), | ||||
|  r0[2] = MAT(m,0,2), r0[3] = MAT(m,0,3), | ||||
|  r0[4] = 1.0, r0[5] = r0[6] = r0[7] = 0.0, | ||||
|    r0[0] = MAT(m, 0, 0), r0[1] = MAT(m, 0, 1), | ||||
|       r0[2] = MAT(m, 0, 2), r0[3] = MAT(m, 0, 3), | ||||
|       r0[4] = 1.0, r0[5] = r0[6] = r0[7] = 0.0, | ||||
|       r1[0] = MAT(m, 1, 0), r1[1] = MAT(m, 1, 1), | ||||
|       r1[2] = MAT(m, 1, 2), r1[3] = MAT(m, 1, 3), | ||||
|       r1[5] = 1.0, r1[4] = r1[6] = r1[7] = 0.0, | ||||
|       r2[0] = MAT(m, 2, 0), r2[1] = MAT(m, 2, 1), | ||||
|       r2[2] = MAT(m, 2, 2), r2[3] = MAT(m, 2, 3), | ||||
|       r2[6] = 1.0, r2[4] = r2[5] = r2[7] = 0.0, | ||||
|       r3[0] = MAT(m, 3, 0), r3[1] = MAT(m, 3, 1), | ||||
|       r3[2] = MAT(m, 3, 2), r3[3] = MAT(m, 3, 3), | ||||
|       r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0; | ||||
|  | ||||
|  r1[0] = MAT(m,1,0), r1[1] = MAT(m,1,1), | ||||
|  r1[2] = MAT(m,1,2), r1[3] = MAT(m,1,3), | ||||
|  r1[5] = 1.0, r1[4] = r1[6] = r1[7] = 0.0, | ||||
|    /* choose pivot - or die */ | ||||
|    if (fabs(r3[0]) > fabs(r2[0])) | ||||
|       SWAP_ROWS(r3, r2); | ||||
|    if (fabs(r2[0]) > fabs(r1[0])) | ||||
|       SWAP_ROWS(r2, r1); | ||||
|    if (fabs(r1[0]) > fabs(r0[0])) | ||||
|       SWAP_ROWS(r1, r0); | ||||
|    if (0.0 == r0[0]) | ||||
|       return GL_FALSE; | ||||
|  | ||||
|  r2[0] = MAT(m,2,0), r2[1] = MAT(m,2,1), | ||||
|  r2[2] = MAT(m,2,2), r2[3] = MAT(m,2,3), | ||||
|  r2[6] = 1.0, r2[4] = r2[5] = r2[7] = 0.0, | ||||
|    /* eliminate first variable     */ | ||||
|    m1 = r1[0] / r0[0]; | ||||
|    m2 = r2[0] / r0[0]; | ||||
|    m3 = r3[0] / r0[0]; | ||||
|    s = r0[1]; | ||||
|    r1[1] -= m1 * s; | ||||
|    r2[1] -= m2 * s; | ||||
|    r3[1] -= m3 * s; | ||||
|    s = r0[2]; | ||||
|    r1[2] -= m1 * s; | ||||
|    r2[2] -= m2 * s; | ||||
|    r3[2] -= m3 * s; | ||||
|    s = r0[3]; | ||||
|    r1[3] -= m1 * s; | ||||
|    r2[3] -= m2 * s; | ||||
|    r3[3] -= m3 * s; | ||||
|    s = r0[4]; | ||||
|    if (s != 0.0) { | ||||
|       r1[4] -= m1 * s; | ||||
|       r2[4] -= m2 * s; | ||||
|       r3[4] -= m3 * s; | ||||
|    } | ||||
|    s = r0[5]; | ||||
|    if (s != 0.0) { | ||||
|       r1[5] -= m1 * s; | ||||
|       r2[5] -= m2 * s; | ||||
|       r3[5] -= m3 * s; | ||||
|    } | ||||
|    s = r0[6]; | ||||
|    if (s != 0.0) { | ||||
|       r1[6] -= m1 * s; | ||||
|       r2[6] -= m2 * s; | ||||
|       r3[6] -= m3 * s; | ||||
|    } | ||||
|    s = r0[7]; | ||||
|    if (s != 0.0) { | ||||
|       r1[7] -= m1 * s; | ||||
|       r2[7] -= m2 * s; | ||||
|       r3[7] -= m3 * s; | ||||
|    } | ||||
|  | ||||
|  r3[0] = MAT(m,3,0), r3[1] = MAT(m,3,1), | ||||
|  r3[2] = MAT(m,3,2), r3[3] = MAT(m,3,3), | ||||
|  r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0; | ||||
|    /* choose pivot - or die */ | ||||
|    if (fabs(r3[1]) > fabs(r2[1])) | ||||
|       SWAP_ROWS(r3, r2); | ||||
|    if (fabs(r2[1]) > fabs(r1[1])) | ||||
|       SWAP_ROWS(r2, r1); | ||||
|    if (0.0 == r1[1]) | ||||
|       return GL_FALSE; | ||||
|  | ||||
|  /* choose pivot - or die */ | ||||
|  if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2); | ||||
|  if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1); | ||||
|  if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0); | ||||
|  if (0.0 == r0[0])  return GL_FALSE; | ||||
|    /* eliminate second variable */ | ||||
|    m2 = r2[1] / r1[1]; | ||||
|    m3 = r3[1] / r1[1]; | ||||
|    r2[2] -= m2 * r1[2]; | ||||
|    r3[2] -= m3 * r1[2]; | ||||
|    r2[3] -= m2 * r1[3]; | ||||
|    r3[3] -= m3 * r1[3]; | ||||
|    s = r1[4]; | ||||
|    if (0.0 != s) { | ||||
|       r2[4] -= m2 * s; | ||||
|       r3[4] -= m3 * s; | ||||
|    } | ||||
|    s = r1[5]; | ||||
|    if (0.0 != s) { | ||||
|       r2[5] -= m2 * s; | ||||
|       r3[5] -= m3 * s; | ||||
|    } | ||||
|    s = r1[6]; | ||||
|    if (0.0 != s) { | ||||
|       r2[6] -= m2 * s; | ||||
|       r3[6] -= m3 * s; | ||||
|    } | ||||
|    s = r1[7]; | ||||
|    if (0.0 != s) { | ||||
|       r2[7] -= m2 * s; | ||||
|       r3[7] -= m3 * s; | ||||
|    } | ||||
|  | ||||
|  /* eliminate first variable     */ | ||||
|  m1 = r1[0]/r0[0]; m2 = r2[0]/r0[0]; m3 = r3[0]/r0[0]; | ||||
|  s = r0[1]; r1[1] -= m1 * s; r2[1] -= m2 * s; r3[1] -= m3 * s; | ||||
|  s = r0[2]; r1[2] -= m1 * s; r2[2] -= m2 * s; r3[2] -= m3 * s; | ||||
|  s = r0[3]; r1[3] -= m1 * s; r2[3] -= m2 * s; r3[3] -= m3 * s; | ||||
|  s = r0[4]; | ||||
|  if (s != 0.0) { r1[4] -= m1 * s; r2[4] -= m2 * s; r3[4] -= m3 * s; } | ||||
|  s = r0[5]; | ||||
|  if (s != 0.0) { r1[5] -= m1 * s; r2[5] -= m2 * s; r3[5] -= m3 * s; } | ||||
|  s = r0[6]; | ||||
|  if (s != 0.0) { r1[6] -= m1 * s; r2[6] -= m2 * s; r3[6] -= m3 * s; } | ||||
|  s = r0[7]; | ||||
|  if (s != 0.0) { r1[7] -= m1 * s; r2[7] -= m2 * s; r3[7] -= m3 * s; } | ||||
|    /* choose pivot - or die */ | ||||
|    if (fabs(r3[2]) > fabs(r2[2])) | ||||
|       SWAP_ROWS(r3, r2); | ||||
|    if (0.0 == r2[2]) | ||||
|       return GL_FALSE; | ||||
|  | ||||
|  /* choose pivot - or die */ | ||||
|  if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2); | ||||
|  if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1); | ||||
|  if (0.0 == r1[1])  return GL_FALSE; | ||||
|    /* eliminate third variable */ | ||||
|    m3 = r3[2] / r2[2]; | ||||
|    r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4], | ||||
|       r3[5] -= m3 * r2[5], r3[6] -= m3 * r2[6], r3[7] -= m3 * r2[7]; | ||||
|  | ||||
|  /* eliminate second variable */ | ||||
|  m2 = r2[1]/r1[1]; m3 = r3[1]/r1[1]; | ||||
|  r2[2] -= m2 * r1[2]; r3[2] -= m3 * r1[2]; | ||||
|  r2[3] -= m2 * r1[3]; r3[3] -= m3 * r1[3]; | ||||
|  s = r1[4]; if (0.0 != s) { r2[4] -= m2 * s; r3[4] -= m3 * s; } | ||||
|  s = r1[5]; if (0.0 != s) { r2[5] -= m2 * s; r3[5] -= m3 * s; } | ||||
|  s = r1[6]; if (0.0 != s) { r2[6] -= m2 * s; r3[6] -= m3 * s; } | ||||
|  s = r1[7]; if (0.0 != s) { r2[7] -= m2 * s; r3[7] -= m3 * s; } | ||||
|    /* last check */ | ||||
|    if (0.0 == r3[3]) | ||||
|       return GL_FALSE; | ||||
|  | ||||
|  /* choose pivot - or die */ | ||||
|  if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2); | ||||
|  if (0.0 == r2[2])  return GL_FALSE; | ||||
|    s = 1.0 / r3[3];		/* now back substitute row 3 */ | ||||
|    r3[4] *= s; | ||||
|    r3[5] *= s; | ||||
|    r3[6] *= s; | ||||
|    r3[7] *= s; | ||||
|  | ||||
|  /* eliminate third variable */ | ||||
|  m3 = r3[2]/r2[2]; | ||||
|  r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4], | ||||
|  r3[5] -= m3 * r2[5], r3[6] -= m3 * r2[6], | ||||
|  r3[7] -= m3 * r2[7]; | ||||
|    m2 = r2[3];			/* now back substitute row 2 */ | ||||
|    s = 1.0 / r2[2]; | ||||
|    r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2), | ||||
|       r2[6] = s * (r2[6] - r3[6] * m2), r2[7] = s * (r2[7] - r3[7] * m2); | ||||
|    m1 = r1[3]; | ||||
|    r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1, | ||||
|       r1[6] -= r3[6] * m1, r1[7] -= r3[7] * m1; | ||||
|    m0 = r0[3]; | ||||
|    r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0, | ||||
|       r0[6] -= r3[6] * m0, r0[7] -= r3[7] * m0; | ||||
|  | ||||
|  /* last check */ | ||||
|  if (0.0 == r3[3]) return GL_FALSE; | ||||
|    m1 = r1[2];			/* now back substitute row 1 */ | ||||
|    s = 1.0 / r1[1]; | ||||
|    r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1), | ||||
|       r1[6] = s * (r1[6] - r2[6] * m1), r1[7] = s * (r1[7] - r2[7] * m1); | ||||
|    m0 = r0[2]; | ||||
|    r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0, | ||||
|       r0[6] -= r2[6] * m0, r0[7] -= r2[7] * m0; | ||||
|  | ||||
|  s = 1.0/r3[3];              /* now back substitute row 3 */ | ||||
|  r3[4] *= s; r3[5] *= s; r3[6] *= s; r3[7] *= s; | ||||
|    m0 = r0[1];			/* now back substitute row 0 */ | ||||
|    s = 1.0 / r0[0]; | ||||
|    r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0), | ||||
|       r0[6] = s * (r0[6] - r1[6] * m0), r0[7] = s * (r0[7] - r1[7] * m0); | ||||
|  | ||||
|  m2 = r2[3];                 /* now back substitute row 2 */ | ||||
|  s  = 1.0/r2[2]; | ||||
|  r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2), | ||||
|  r2[6] = s * (r2[6] - r3[6] * m2), r2[7] = s * (r2[7] - r3[7] * m2); | ||||
|  m1 = r1[3]; | ||||
|  r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1, | ||||
|  r1[6] -= r3[6] * m1, r1[7] -= r3[7] * m1; | ||||
|  m0 = r0[3]; | ||||
|  r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0, | ||||
|  r0[6] -= r3[6] * m0, r0[7] -= r3[7] * m0; | ||||
|    MAT(out, 0, 0) = r0[4]; | ||||
|    MAT(out, 0, 1) = r0[5], MAT(out, 0, 2) = r0[6]; | ||||
|    MAT(out, 0, 3) = r0[7], MAT(out, 1, 0) = r1[4]; | ||||
|    MAT(out, 1, 1) = r1[5], MAT(out, 1, 2) = r1[6]; | ||||
|    MAT(out, 1, 3) = r1[7], MAT(out, 2, 0) = r2[4]; | ||||
|    MAT(out, 2, 1) = r2[5], MAT(out, 2, 2) = r2[6]; | ||||
|    MAT(out, 2, 3) = r2[7], MAT(out, 3, 0) = r3[4]; | ||||
|    MAT(out, 3, 1) = r3[5], MAT(out, 3, 2) = r3[6]; | ||||
|    MAT(out, 3, 3) = r3[7]; | ||||
|  | ||||
|  m1 = r1[2];                 /* now back substitute row 1 */ | ||||
|  s  = 1.0/r1[1]; | ||||
|  r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1), | ||||
|  r1[6] = s * (r1[6] - r2[6] * m1), r1[7] = s * (r1[7] - r2[7] * m1); | ||||
|  m0 = r0[2]; | ||||
|  r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0, | ||||
|  r0[6] -= r2[6] * m0, r0[7] -= r2[7] * m0; | ||||
|  | ||||
|  m0 = r0[1];                 /* now back substitute row 0 */ | ||||
|  s  = 1.0/r0[0]; | ||||
|  r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0), | ||||
|  r0[6] = s * (r0[6] - r1[6] * m0), r0[7] = s * (r0[7] - r1[7] * m0); | ||||
|  | ||||
|  MAT(out,0,0) = r0[4]; MAT(out,0,1) = r0[5], | ||||
|  MAT(out,0,2) = r0[6]; MAT(out,0,3) = r0[7], | ||||
|  MAT(out,1,0) = r1[4]; MAT(out,1,1) = r1[5], | ||||
|  MAT(out,1,2) = r1[6]; MAT(out,1,3) = r1[7], | ||||
|  MAT(out,2,0) = r2[4]; MAT(out,2,1) = r2[5], | ||||
|  MAT(out,2,2) = r2[6]; MAT(out,2,3) = r2[7], | ||||
|  MAT(out,3,0) = r3[4]; MAT(out,3,1) = r3[5], | ||||
|  MAT(out,3,2) = r3[6]; MAT(out,3,3) = r3[7];  | ||||
|  | ||||
|  return GL_TRUE; | ||||
|    return GL_TRUE; | ||||
|  | ||||
| #undef MAT | ||||
| #undef SWAP_ROWS | ||||
| @@ -252,63 +293,70 @@ static GLboolean invert_matrix( const GLdouble *m, GLdouble *out ) | ||||
|  | ||||
|  | ||||
| /* projection du point (objx,objy,obz) sur l'ecran (winx,winy,winz) */ | ||||
| GLint GLAPIENTRY gluProject(GLdouble objx,GLdouble objy,GLdouble objz, | ||||
|                           const GLdouble model[16],const GLdouble proj[16], | ||||
|                           const GLint viewport[4], | ||||
|                           GLdouble *winx,GLdouble *winy,GLdouble *winz) | ||||
| GLint GLAPIENTRY | ||||
| gluProject(GLdouble objx, GLdouble objy, GLdouble objz, | ||||
| 	   const GLdouble model[16], const GLdouble proj[16], | ||||
| 	   const GLint viewport[4], | ||||
| 	   GLdouble * winx, GLdouble * winy, GLdouble * winz) | ||||
| { | ||||
|     /* matrice de transformation */ | ||||
|     GLdouble in[4],out[4]; | ||||
|    /* matrice de transformation */ | ||||
|    GLdouble in[4], out[4]; | ||||
|  | ||||
|     /* initilise la matrice et le vecteur a transformer */ | ||||
|     in[0]=objx; in[1]=objy; in[2]=objz; in[3]=1.0; | ||||
|     transform_point(out,model,in); | ||||
|     transform_point(in,proj,out); | ||||
|    /* initilise la matrice et le vecteur a transformer */ | ||||
|    in[0] = objx; | ||||
|    in[1] = objy; | ||||
|    in[2] = objz; | ||||
|    in[3] = 1.0; | ||||
|    transform_point(out, model, in); | ||||
|    transform_point(in, proj, out); | ||||
|  | ||||
|     /* d'ou le resultat normalise entre -1 et 1*/ | ||||
|     if (in[3]==0.0) | ||||
|        return GL_FALSE; | ||||
|    /* d'ou le resultat normalise entre -1 et 1 */ | ||||
|    if (in[3] == 0.0) | ||||
|       return GL_FALSE; | ||||
|  | ||||
|     in[0]/=in[3]; in[1]/=in[3]; in[2]/=in[3]; | ||||
|    in[0] /= in[3]; | ||||
|    in[1] /= in[3]; | ||||
|    in[2] /= in[3]; | ||||
|  | ||||
|     /* en coordonnees ecran */ | ||||
|     *winx = viewport[0]+(1+in[0])*viewport[2]/2; | ||||
|     *winy = viewport[1]+(1+in[1])*viewport[3]/2; | ||||
|     /* entre 0 et 1 suivant z */ | ||||
|     *winz = (1+in[2])/2; | ||||
|     return GL_TRUE; | ||||
|    /* en coordonnees ecran */ | ||||
|    *winx = viewport[0] + (1 + in[0]) * viewport[2] / 2; | ||||
|    *winy = viewport[1] + (1 + in[1]) * viewport[3] / 2; | ||||
|    /* entre 0 et 1 suivant z */ | ||||
|    *winz = (1 + in[2]) / 2; | ||||
|    return GL_TRUE; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* transformation du point ecran (winx,winy,winz) en point objet */ | ||||
| GLint GLAPIENTRY gluUnProject(GLdouble winx,GLdouble winy,GLdouble winz, | ||||
|                             const GLdouble model[16],const GLdouble proj[16], | ||||
|                             const GLint viewport[4], | ||||
|                             GLdouble *objx,GLdouble *objy,GLdouble *objz) | ||||
| GLint GLAPIENTRY | ||||
| gluUnProject(GLdouble winx, GLdouble winy, GLdouble winz, | ||||
| 	     const GLdouble model[16], const GLdouble proj[16], | ||||
| 	     const GLint viewport[4], | ||||
| 	     GLdouble * objx, GLdouble * objy, GLdouble * objz) | ||||
| { | ||||
|     /* matrice de transformation */ | ||||
|     GLdouble m[16], A[16]; | ||||
|     GLdouble in[4],out[4]; | ||||
|    /* matrice de transformation */ | ||||
|    GLdouble m[16], A[16]; | ||||
|    GLdouble in[4], out[4]; | ||||
|  | ||||
|     /* transformation coordonnees normalisees entre -1 et 1 */ | ||||
|     in[0]=(winx-viewport[0])*2/viewport[2] - 1.0; | ||||
|     in[1]=(winy-viewport[1])*2/viewport[3] - 1.0; | ||||
|     in[2]=2*winz - 1.0; | ||||
|     in[3]=1.0; | ||||
|    /* transformation coordonnees normalisees entre -1 et 1 */ | ||||
|    in[0] = (winx - viewport[0]) * 2 / viewport[2] - 1.0; | ||||
|    in[1] = (winy - viewport[1]) * 2 / viewport[3] - 1.0; | ||||
|    in[2] = 2 * winz - 1.0; | ||||
|    in[3] = 1.0; | ||||
|  | ||||
|     /* calcul transformation inverse */ | ||||
|     matmul(A,proj,model); | ||||
|     invert_matrix(A,m); | ||||
|    /* calcul transformation inverse */ | ||||
|    matmul(A, proj, model); | ||||
|    invert_matrix(A, m); | ||||
|  | ||||
|     /* d'ou les coordonnees objets */ | ||||
|     transform_point(out,m,in); | ||||
|     if (out[3]==0.0) | ||||
|        return GL_FALSE; | ||||
|     *objx=out[0]/out[3]; | ||||
|     *objy=out[1]/out[3]; | ||||
|     *objz=out[2]/out[3]; | ||||
|     return GL_TRUE; | ||||
|    /* d'ou les coordonnees objets */ | ||||
|    transform_point(out, m, in); | ||||
|    if (out[3] == 0.0) | ||||
|       return GL_FALSE; | ||||
|    *objx = out[0] / out[3]; | ||||
|    *objy = out[1] / out[3]; | ||||
|    *objz = out[2] / out[3]; | ||||
|    return GL_TRUE; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -317,35 +365,36 @@ GLint GLAPIENTRY gluUnProject(GLdouble winx,GLdouble winy,GLdouble winz, | ||||
|  * This is like gluUnProject but also takes near and far DepthRange values. | ||||
|  */ | ||||
| GLint GLAPIENTRY | ||||
| gluUnProject4( GLdouble winx, GLdouble winy, GLdouble winz, GLdouble clipw, | ||||
|                const GLdouble modelMatrix[16], | ||||
|                const GLdouble projMatrix[16], | ||||
|                const GLint viewport[4], | ||||
|                GLclampd nearZ, GLclampd farZ, | ||||
|                GLdouble *objx, GLdouble *objy, GLdouble *objz, GLdouble *objw ) | ||||
| gluUnProject4(GLdouble winx, GLdouble winy, GLdouble winz, GLdouble clipw, | ||||
| 	      const GLdouble modelMatrix[16], | ||||
| 	      const GLdouble projMatrix[16], | ||||
| 	      const GLint viewport[4], | ||||
| 	      GLclampd nearZ, GLclampd farZ, | ||||
| 	      GLdouble * objx, GLdouble * objy, GLdouble * objz, | ||||
| 	      GLdouble * objw) | ||||
| { | ||||
|     /* matrice de transformation */ | ||||
|     GLdouble m[16], A[16]; | ||||
|     GLdouble in[4],out[4]; | ||||
|     GLdouble z = nearZ + winz * (farZ - nearZ); | ||||
|    /* matrice de transformation */ | ||||
|    GLdouble m[16], A[16]; | ||||
|    GLdouble in[4], out[4]; | ||||
|    GLdouble z = nearZ + winz * (farZ - nearZ); | ||||
|  | ||||
|     /* transformation coordonnees normalisees entre -1 et 1 */ | ||||
|     in[0] = (winx-viewport[0])*2/viewport[2] - 1.0; | ||||
|     in[1] = (winy-viewport[1])*2/viewport[3] - 1.0; | ||||
|     in[2] = 2.0 * z - 1.0; | ||||
|     in[3] = clipw; | ||||
|    /* transformation coordonnees normalisees entre -1 et 1 */ | ||||
|    in[0] = (winx - viewport[0]) * 2 / viewport[2] - 1.0; | ||||
|    in[1] = (winy - viewport[1]) * 2 / viewport[3] - 1.0; | ||||
|    in[2] = 2.0 * z - 1.0; | ||||
|    in[3] = clipw; | ||||
|  | ||||
|     /* calcul transformation inverse */ | ||||
|     matmul(A,projMatrix,modelMatrix); | ||||
|     invert_matrix(A,m); | ||||
|    /* calcul transformation inverse */ | ||||
|    matmul(A, projMatrix, modelMatrix); | ||||
|    invert_matrix(A, m); | ||||
|  | ||||
|     /* d'ou les coordonnees objets */ | ||||
|     transform_point(out,m,in); | ||||
|     if (out[3]==0.0) | ||||
|        return GL_FALSE; | ||||
|     *objx=out[0]/out[3]; | ||||
|     *objy=out[1]/out[3]; | ||||
|     *objz=out[2]/out[3]; | ||||
|     *objw=out[3]; | ||||
|     return GL_TRUE; | ||||
|    /* d'ou les coordonnees objets */ | ||||
|    transform_point(out, m, in); | ||||
|    if (out[3] == 0.0) | ||||
|       return GL_FALSE; | ||||
|    *objx = out[0] / out[3]; | ||||
|    *objy = out[1] / out[3]; | ||||
|    *objz = out[2] / out[3]; | ||||
|    *objw = out[3]; | ||||
|    return GL_TRUE; | ||||
| } | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1164
									
								
								src/glu/mesa/tess.c
									
									
									
									
									
								
							
							
						
						
									
										1164
									
								
								src/glu/mesa/tess.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,125 +1,103 @@ | ||||
| /* $Id: tess.h,v 1.15 1999/11/05 20:37:14 gareth Exp $ */ | ||||
| /* $Id: tess.h,v 1.15.2.7 2000/07/11 01:39:41 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * | ||||
|  * GLU 1.3 Polygon Tessellation by Gareth Hughes <garethh@bell-labs.com> | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
|  | ||||
| #ifndef __GLU_TESS_H__ | ||||
| #define __GLU_TESS_H__ | ||||
| /* | ||||
|  * This file is part of the polygon tesselation code contributed by | ||||
|  * Bogdan Sikorski | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef TESS_H | ||||
| #define TESS_H | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "gluP.h" | ||||
|  | ||||
| #include "tess_typedefs.h" | ||||
| #include "tess_macros.h" | ||||
| #include "tess_hash.h" | ||||
| #include "tess_heap.h" | ||||
| #if 0 | ||||
| #include "tess_grid.h" | ||||
| #endif | ||||
| #define EPSILON 1e-06		/* epsilon for double precision compares */ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * The GLUtesselator structure: | ||||
|  *****************************************************************************/ | ||||
| struct GLUtesselator | ||||
| typedef enum | ||||
| { | ||||
|     tess_callbacks_t	callbacks; | ||||
|     GLboolean		boundary_only; | ||||
|     GLenum		winding_rule; | ||||
|     GLdouble		tolerance; | ||||
|     tess_plane_t	plane; | ||||
|     GLuint		contour_count; | ||||
|     tess_contour_t	*contours, *last_contour; | ||||
|     tess_contour_t	*current_contour; | ||||
|     GLdouble		mins[2], maxs[2]; | ||||
|     GLuint		vertex_count; | ||||
|     tess_vertex_t	**sorted_vertices; | ||||
| #if 0 | ||||
|     tess_grid_t		*grid;			/* Not currently used... */ | ||||
| #endif | ||||
|     heap_t		*ears; | ||||
|     hashtable_t		*cvc_lists; | ||||
|     void		*data; | ||||
|     GLboolean		edge_flag; | ||||
|     GLuint		label; | ||||
|     GLenum		error; | ||||
|    OXY, | ||||
|    OYZ, | ||||
|    OXZ | ||||
| } | ||||
| projection_type; | ||||
|  | ||||
| typedef struct callbacks_str | ||||
| { | ||||
|    void (GLCALLBACK * begin) (GLenum mode); | ||||
|    void (GLCALLBACK * edgeFlag) (GLboolean flag); | ||||
|    void (GLCALLBACK * vertex) (GLvoid * v); | ||||
|    void (GLCALLBACK * end) (void); | ||||
|    void (GLCALLBACK * error) (GLenum err); | ||||
| } | ||||
| tess_callbacks; | ||||
|  | ||||
| typedef struct vertex_str | ||||
| { | ||||
|    void *data; | ||||
|    GLdouble location[3]; | ||||
|    GLdouble x, y; | ||||
|    GLboolean edge_flag; | ||||
|    struct vertex_str *shadow_vertex; | ||||
|    struct vertex_str *next, *previous; | ||||
| } | ||||
| tess_vertex; | ||||
|  | ||||
| typedef struct contour_str | ||||
| { | ||||
|    GLenum type; | ||||
|    GLuint vertex_cnt; | ||||
|    GLdouble area; | ||||
|    GLenum orientation; | ||||
|    struct vertex_str *vertices, *last_vertex; | ||||
|    struct contour_str *next, *previous; | ||||
| } | ||||
| tess_contour; | ||||
|  | ||||
| typedef struct polygon_str | ||||
| { | ||||
|    GLuint vertex_cnt; | ||||
|    GLdouble A, B, C, D; | ||||
|    GLdouble area; | ||||
|    GLenum orientation; | ||||
|    struct vertex_str *vertices, *last_vertex; | ||||
| } | ||||
| tess_polygon; | ||||
|  | ||||
| struct GLUtriangulatorObj | ||||
| { | ||||
|    tess_contour *contours, *last_contour; | ||||
|    GLuint contour_cnt; | ||||
|    tess_callbacks callbacks; | ||||
|    tess_polygon *current_polygon; | ||||
|    GLenum error; | ||||
|    GLdouble A, B, C, D; | ||||
|    projection_type projection; | ||||
| }; | ||||
|  | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * Tessellation error handler: | ||||
|  *****************************************************************************/ | ||||
| extern void tess_error_callback( GLUtesselator *, GLenum ); | ||||
| extern void tess_call_user_error(GLUtriangulatorObj *, GLenum); | ||||
|  | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * Debugging output: | ||||
|  *****************************************************************************/ | ||||
| #ifdef DEBUG | ||||
| extern	int	tess_dbg_level; | ||||
|  | ||||
| #define DBG_LEVEL_BASE		1 | ||||
| #define DBG_LEVEL_VERBOSE	10 | ||||
| #define DBG_LEVEL_ENTEREXIT	20 | ||||
|  | ||||
| #ifdef _WIN32 | ||||
| #define DBG_STREAM	stdout | ||||
| #else | ||||
| #define DBG_STREAM	stderr | ||||
| #endif | ||||
|  | ||||
| #ifdef __GNUC__ | ||||
| #define MSG( level, format, args... )					\ | ||||
|     if ( level <= tess_dbg_level ) {					\ | ||||
| 	fprintf( DBG_STREAM, "%9.9s:%d:\t ", __FILE__, __LINE__ );	\ | ||||
| 	fprintf( DBG_STREAM, format, ## args );				\ | ||||
| 	fflush( DBG_STREAM );						\ | ||||
|     } | ||||
| #else | ||||
| #define MSG		tess_msg | ||||
| #endif /* __GNUC__ */ | ||||
|  | ||||
| #else | ||||
| #define MSG		tess_msg | ||||
| #endif /* DEBUG */ | ||||
|  | ||||
| extern INLINE void tess_msg( int level, char *format, ... ); | ||||
| extern INLINE void tess_info( char *file, char *line ); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* __GLU_TESS_H__ */ | ||||
|   | ||||
							
								
								
									
										407
									
								
								src/glu/mesa/tesselat.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										407
									
								
								src/glu/mesa/tesselat.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,407 @@ | ||||
| /* $Id: tesselat.c,v 1.2.2.1 2000/07/11 02:09:22 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2.1 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * This file is part of the polygon tesselation code contributed by | ||||
|  * Bogdan Sikorski | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifdef PC_HEADER | ||||
| #include "all.h" | ||||
| #else | ||||
| #include <stdlib.h> | ||||
| #include <math.h> | ||||
| #include "tess.h" | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
| static GLboolean edge_flag; | ||||
|  | ||||
| static void emit_triangle(GLUtriangulatorObj *, tess_vertex *, | ||||
| 			  tess_vertex *, tess_vertex *); | ||||
|  | ||||
| static void emit_triangle_with_edge_flag(GLUtriangulatorObj *, | ||||
| 					 tess_vertex *, GLboolean, | ||||
| 					 tess_vertex *, GLboolean, | ||||
| 					 tess_vertex *, GLboolean); | ||||
|  | ||||
| static GLdouble | ||||
| twice_the_triangle_area(tess_vertex * va, tess_vertex * vb, tess_vertex * vc) | ||||
| { | ||||
|    return (vb->x - va->x) * (vc->y - va->y) - (vb->y - va->y) * (vc->x - | ||||
| 								 va->x); | ||||
| } | ||||
|  | ||||
| static GLboolean | ||||
| left(GLdouble A, GLdouble B, GLdouble C, GLdouble x, GLdouble y) | ||||
| { | ||||
|    if (A * x + B * y + C > -EPSILON) | ||||
|       return GL_TRUE; | ||||
|    else | ||||
|       return GL_FALSE; | ||||
| } | ||||
|  | ||||
| static GLboolean | ||||
| right(GLdouble A, GLdouble B, GLdouble C, GLdouble x, GLdouble y) | ||||
| { | ||||
|    if (A * x + B * y + C < EPSILON) | ||||
|       return GL_TRUE; | ||||
|    else | ||||
|       return GL_FALSE; | ||||
| } | ||||
|  | ||||
| static GLint | ||||
| convex_ccw(tess_vertex * va, | ||||
| 	   tess_vertex * vb, tess_vertex * vc, GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    GLdouble d; | ||||
|  | ||||
|    d = twice_the_triangle_area(va, vb, vc); | ||||
|  | ||||
|    if (d > EPSILON) { | ||||
|       return 1; | ||||
|    } | ||||
|    else if (d < -EPSILON) { | ||||
|       return 0; | ||||
|    } | ||||
|    else { | ||||
|       return -1; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static GLint | ||||
| convex_cw(tess_vertex * va, | ||||
| 	  tess_vertex * vb, tess_vertex * vc, GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    GLdouble d; | ||||
|  | ||||
|    d = twice_the_triangle_area(va, vb, vc); | ||||
|  | ||||
|    if (d < -EPSILON) { | ||||
|       return 1; | ||||
|    } | ||||
|    else if (d > EPSILON) { | ||||
|       return 0; | ||||
|    } | ||||
|    else { | ||||
|       return -1; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static GLboolean | ||||
| diagonal_ccw(tess_vertex * va, | ||||
| 	     tess_vertex * vb, | ||||
| 	     GLUtriangulatorObj * tobj, tess_contour * contour) | ||||
| { | ||||
|    tess_vertex *vc = va->next, *vertex, *shadow_vertex; | ||||
|    struct | ||||
|    { | ||||
|       GLdouble A, B, C; | ||||
|    } | ||||
|    ac, cb, ba; | ||||
|    GLdouble x, y; | ||||
|  | ||||
|    GLint res = convex_ccw(va, vc, vb, tobj); | ||||
|    if (res == 0) | ||||
|       return GL_FALSE; | ||||
|    if (res == -1) | ||||
|       return GL_TRUE; | ||||
|  | ||||
|    ba.A = vb->y - va->y; | ||||
|    ba.B = va->x - vb->x; | ||||
|    ba.C = -ba.A * va->x - ba.B * va->y; | ||||
|    ac.A = va->y - vc->y; | ||||
|    ac.B = vc->x - va->x; | ||||
|    ac.C = -ac.A * vc->x - ac.B * vc->y; | ||||
|    cb.A = vc->y - vb->y; | ||||
|    cb.B = vb->x - vc->x; | ||||
|    cb.C = -cb.A * vb->x - cb.B * vb->y; | ||||
|    for (vertex = vb->next; vertex != va; vertex = vertex->next) { | ||||
|       shadow_vertex = vertex->shadow_vertex; | ||||
|       if (shadow_vertex != NULL && | ||||
| 	  (shadow_vertex == va || shadow_vertex == vb || shadow_vertex == vc)) | ||||
| 	 continue; | ||||
|       x = vertex->x; | ||||
|       y = vertex->y; | ||||
|       if (left(ba.A, ba.B, ba.C, x, y) && | ||||
| 	  left(ac.A, ac.B, ac.C, x, y) && left(cb.A, cb.B, cb.C, x, y)) | ||||
| 	 return GL_FALSE; | ||||
|    } | ||||
|    return GL_TRUE; | ||||
| } | ||||
|  | ||||
| static GLboolean | ||||
| diagonal_cw(tess_vertex * va, | ||||
| 	    tess_vertex * vb, | ||||
| 	    GLUtriangulatorObj * tobj, tess_contour * contour) | ||||
| { | ||||
|    tess_vertex *vc = va->next, *vertex, *shadow_vertex; | ||||
|    struct | ||||
|    { | ||||
|       GLdouble A, B, C; | ||||
|    } | ||||
|    ac, cb, ba; | ||||
|    GLdouble x, y; | ||||
|  | ||||
|    GLint res = convex_cw(va, vc, vb, tobj); | ||||
|    if (res == 0) | ||||
|       return GL_FALSE; | ||||
|    if (res == -1) | ||||
|       return GL_TRUE; | ||||
|  | ||||
|    ba.A = vb->y - va->y; | ||||
|    ba.B = va->x - vb->x; | ||||
|    ba.C = -ba.A * va->x - ba.B * va->y; | ||||
|    ac.A = va->y - vc->y; | ||||
|    ac.B = vc->x - va->x; | ||||
|    ac.C = -ac.A * vc->x - ac.B * vc->y; | ||||
|    cb.A = vc->y - vb->y; | ||||
|    cb.B = vb->x - vc->x; | ||||
|    cb.C = -cb.A * vb->x - cb.B * vb->y; | ||||
|    for (vertex = vb->next; vertex != va; vertex = vertex->next) { | ||||
|       shadow_vertex = vertex->shadow_vertex; | ||||
|       if (shadow_vertex != NULL && | ||||
| 	  (shadow_vertex == va || shadow_vertex == vb || shadow_vertex == vc)) | ||||
| 	 continue; | ||||
|       x = vertex->x; | ||||
|       y = vertex->y; | ||||
|       if (right(ba.A, ba.B, ba.C, x, y) && | ||||
| 	  right(ac.A, ac.B, ac.C, x, y) && right(cb.A, cb.B, cb.C, x, y)) | ||||
| 	 return GL_FALSE; | ||||
|    } | ||||
|    return GL_TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clip_ear(GLUtriangulatorObj * tobj, tess_vertex * v, tess_contour * contour) | ||||
| { | ||||
|    emit_triangle(tobj, v->previous, v, v->next); | ||||
|    /* the first in the list */ | ||||
|    if (contour->vertices == v) { | ||||
|       contour->vertices = v->next; | ||||
|       contour->last_vertex->next = v->next; | ||||
|       v->next->previous = contour->last_vertex; | ||||
|    } | ||||
|    else | ||||
|       /* the last ? */ | ||||
|    if (contour->last_vertex == v) { | ||||
|       contour->vertices->previous = v->previous; | ||||
|       v->previous->next = v->next; | ||||
|       contour->last_vertex = v->previous; | ||||
|    } | ||||
|    else { | ||||
|       v->next->previous = v->previous; | ||||
|       v->previous->next = v->next; | ||||
|    } | ||||
|    free(v); | ||||
|    --(contour->vertex_cnt); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clip_ear_with_edge_flag(GLUtriangulatorObj * tobj, | ||||
| 			tess_vertex * v, tess_contour * contour) | ||||
| { | ||||
|    emit_triangle_with_edge_flag(tobj, v->previous, v->previous->edge_flag, | ||||
| 				v, v->edge_flag, v->next, GL_FALSE); | ||||
|    v->previous->edge_flag = GL_FALSE; | ||||
|    /* the first in the list */ | ||||
|    if (contour->vertices == v) { | ||||
|       contour->vertices = v->next; | ||||
|       contour->last_vertex->next = v->next; | ||||
|       v->next->previous = contour->last_vertex; | ||||
|    } | ||||
|    else | ||||
|       /* the last ? */ | ||||
|    if (contour->last_vertex == v) { | ||||
|       contour->vertices->previous = v->previous; | ||||
|       v->previous->next = v->next; | ||||
|       contour->last_vertex = v->previous; | ||||
|    } | ||||
|    else { | ||||
|       v->next->previous = v->previous; | ||||
|       v->previous->next = v->next; | ||||
|    } | ||||
|    free(v); | ||||
|    --(contour->vertex_cnt); | ||||
| } | ||||
|  | ||||
| static void | ||||
| triangulate_ccw(GLUtriangulatorObj * tobj, tess_contour * contour) | ||||
| { | ||||
|    tess_vertex *vertex; | ||||
|    GLuint vertex_cnt = contour->vertex_cnt; | ||||
|  | ||||
|    while (vertex_cnt > 3) { | ||||
|       vertex = contour->vertices; | ||||
|       while (diagonal_ccw(vertex, vertex->next->next, tobj, contour) == | ||||
| 	     GL_FALSE && tobj->error == GLU_NO_ERROR) | ||||
| 	 vertex = vertex->next; | ||||
|       if (tobj->error != GLU_NO_ERROR) | ||||
| 	 return; | ||||
|       clip_ear(tobj, vertex->next, contour); | ||||
|       --vertex_cnt; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static void | ||||
| triangulate_cw(GLUtriangulatorObj * tobj, tess_contour * contour) | ||||
| { | ||||
|    tess_vertex *vertex; | ||||
|    GLuint vertex_cnt = contour->vertex_cnt; | ||||
|  | ||||
|    while (vertex_cnt > 3) { | ||||
|       vertex = contour->vertices; | ||||
|       while (diagonal_cw(vertex, vertex->next->next, tobj, contour) == | ||||
| 	     GL_FALSE && tobj->error == GLU_NO_ERROR) | ||||
| 	 vertex = vertex->next; | ||||
|       if (tobj->error != GLU_NO_ERROR) | ||||
| 	 return; | ||||
|       clip_ear(tobj, vertex->next, contour); | ||||
|       --vertex_cnt; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static void | ||||
| triangulate_ccw_with_edge_flag(GLUtriangulatorObj * tobj, | ||||
| 			       tess_contour * contour) | ||||
| { | ||||
|    tess_vertex *vertex; | ||||
|    GLuint vertex_cnt = contour->vertex_cnt; | ||||
|  | ||||
|    while (vertex_cnt > 3) { | ||||
|       vertex = contour->vertices; | ||||
|       while (diagonal_ccw(vertex, vertex->next->next, tobj, contour) == | ||||
| 	     GL_FALSE && tobj->error == GLU_NO_ERROR) | ||||
| 	 vertex = vertex->next; | ||||
|       if (tobj->error != GLU_NO_ERROR) | ||||
| 	 return; | ||||
|       clip_ear_with_edge_flag(tobj, vertex->next, contour); | ||||
|       --vertex_cnt; | ||||
|    } | ||||
| } | ||||
|  | ||||
| static void | ||||
| triangulate_cw_with_edge_flag(GLUtriangulatorObj * tobj, | ||||
| 			      tess_contour * contour) | ||||
| { | ||||
|    tess_vertex *vertex; | ||||
|    GLuint vertex_cnt = contour->vertex_cnt; | ||||
|  | ||||
|    while (vertex_cnt > 3) { | ||||
|       vertex = contour->vertices; | ||||
|       while (diagonal_cw(vertex, vertex->next->next, tobj, contour) == | ||||
| 	     GL_FALSE && tobj->error == GLU_NO_ERROR) | ||||
| 	 vertex = vertex->next; | ||||
|       if (tobj->error != GLU_NO_ERROR) | ||||
| 	 return; | ||||
|       clip_ear_with_edge_flag(tobj, vertex->next, contour); | ||||
|       --vertex_cnt; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void | ||||
| tess_tesselate(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_contour *contour; | ||||
|  | ||||
|    for (contour = tobj->contours; contour != NULL; contour = contour->next) { | ||||
|       if (contour->orientation == GLU_CCW) { | ||||
| 	 triangulate_ccw(tobj, contour); | ||||
|       } | ||||
|       else { | ||||
| 	 triangulate_cw(tobj, contour); | ||||
|       } | ||||
|       if (tobj->error != GLU_NO_ERROR) | ||||
| 	 return; | ||||
|  | ||||
|       /* emit the last triangle */ | ||||
|       emit_triangle(tobj, contour->vertices, contour->vertices->next, | ||||
| 		    contour->vertices->next->next); | ||||
|    } | ||||
| } | ||||
|  | ||||
| void | ||||
| tess_tesselate_with_edge_flag(GLUtriangulatorObj * tobj) | ||||
| { | ||||
|    tess_contour *contour; | ||||
|  | ||||
|    edge_flag = GL_TRUE; | ||||
|    /* first callback with edgeFlag set to GL_TRUE */ | ||||
|    (tobj->callbacks.edgeFlag) (GL_TRUE); | ||||
|  | ||||
|    for (contour = tobj->contours; contour != NULL; contour = contour->next) { | ||||
|       if (contour->orientation == GLU_CCW) | ||||
| 	 triangulate_ccw_with_edge_flag(tobj, contour); | ||||
|       else | ||||
| 	 triangulate_cw_with_edge_flag(tobj, contour); | ||||
|       if (tobj->error != GLU_NO_ERROR) | ||||
| 	 return; | ||||
|       /* emit the last triangle */ | ||||
|       emit_triangle_with_edge_flag(tobj, contour->vertices, | ||||
| 				   contour->vertices->edge_flag, | ||||
| 				   contour->vertices->next, | ||||
| 				   contour->vertices->next->edge_flag, | ||||
| 				   contour->vertices->next->next, | ||||
| 				   contour->vertices->next->next->edge_flag); | ||||
|    } | ||||
| } | ||||
|  | ||||
| static void | ||||
| emit_triangle(GLUtriangulatorObj * tobj, | ||||
| 	      tess_vertex * v1, tess_vertex * v2, tess_vertex * v3) | ||||
| { | ||||
|    (tobj->callbacks.begin) (GL_TRIANGLES); | ||||
|    (tobj->callbacks.vertex) (v1->data); | ||||
|    (tobj->callbacks.vertex) (v2->data); | ||||
|    (tobj->callbacks.vertex) (v3->data); | ||||
|    (tobj->callbacks.end) (); | ||||
| } | ||||
|  | ||||
| static void | ||||
| emit_triangle_with_edge_flag(GLUtriangulatorObj * tobj, | ||||
| 			     tess_vertex * v1, | ||||
| 			     GLboolean edge_flag1, | ||||
| 			     tess_vertex * v2, | ||||
| 			     GLboolean edge_flag2, | ||||
| 			     tess_vertex * v3, GLboolean edge_flag3) | ||||
| { | ||||
|    (tobj->callbacks.begin) (GL_TRIANGLES); | ||||
|    if (edge_flag1 != edge_flag) { | ||||
|       edge_flag = (edge_flag == GL_TRUE ? GL_FALSE : GL_TRUE); | ||||
|       (tobj->callbacks.edgeFlag) (edge_flag); | ||||
|    } | ||||
|    (tobj->callbacks.vertex) (v1->data); | ||||
|    if (edge_flag2 != edge_flag) { | ||||
|       edge_flag = (edge_flag == GL_TRUE ? GL_FALSE : GL_TRUE); | ||||
|       (tobj->callbacks.edgeFlag) (edge_flag); | ||||
|    } | ||||
|    (tobj->callbacks.vertex) (v2->data); | ||||
|    if (edge_flag3 != edge_flag) { | ||||
|       edge_flag = (edge_flag == GL_TRUE ? GL_FALSE : GL_TRUE); | ||||
|       (tobj->callbacks.edgeFlag) (edge_flag); | ||||
|    } | ||||
|    (tobj->callbacks.vertex) (v3->data); | ||||
|    (tobj->callbacks.end) (); | ||||
| } | ||||
| @@ -1,6 +1,5 @@ | ||||
| ## BeOS Generic Makefile v2.0 ## | ||||
|  | ||||
| ## Modified by Brian Paul to work with Mesa 3.1 | ||||
|  | ||||
|  | ||||
| ## Fill in this file to specify the project being created, and the referenced | ||||
| @@ -48,9 +47,8 @@ RSRCS= | ||||
| #		naming scheme you need to specify the path to the library | ||||
| #		and it's name | ||||
| #		library: my_lib.a entry: my_lib.a or path/my_lib.a | ||||
| #LIBS= MesaGL MesaGLU be | ||||
| LIBS= GL GLU be | ||||
| 		 | ||||
|  | ||||
| #	specify additional paths to directories following the standard | ||||
| #	libXXX.so or libXXX.a naming scheme.  You can specify full paths | ||||
| #	or paths relative to the makefile.  The paths included may not | ||||
|   | ||||
| @@ -303,8 +303,7 @@ interruptibleXNextEvent(Display * dpy, XEvent * event) | ||||
|     } | ||||
|     FD_ZERO(&fds); | ||||
|     FD_SET(__glutConnectionFD, &fds); | ||||
|     rc = select(__glutConnectionFD + 1, &fds, | ||||
|       NULL, NULL, NULL); | ||||
|     rc = select(__glutConnectionFD + 1, &fds, NULL, NULL, NULL); | ||||
|     if (rc < 0) { | ||||
|       if (errno == EINTR) { | ||||
|         return 0; | ||||
| @@ -897,8 +896,7 @@ waitForSomething(void) | ||||
|     waittime = zerotime; | ||||
|   } | ||||
| #if !defined(_WIN32) | ||||
|   rc = select(__glutConnectionFD + 1, &fds, | ||||
|     NULL, NULL, &waittime); | ||||
|   rc = select(__glutConnectionFD + 1, &fds, NULL, NULL, &waittime); | ||||
|   if (rc < 0 && errno != EINTR) | ||||
|     __glutFatalError("select error."); | ||||
| #else | ||||
|   | ||||
| @@ -20,7 +20,9 @@ | ||||
| #include <X11/Xutil.h> | ||||
| #else | ||||
| #include <windows.h> | ||||
| #ifndef __CYGWIN32__ | ||||
| #include <mmsystem.h>  /* Win32 Multimedia API header. */ | ||||
| #endif | ||||
| #endif /* !_WIN32 */ | ||||
|  | ||||
| #include "glutint.h" | ||||
| @@ -157,7 +159,7 @@ tabletPosChange(GLUTwindow * window, int first, int count, int *data) | ||||
| } | ||||
| #endif /* !_WIN32 */ | ||||
|  | ||||
| int | ||||
| static int | ||||
| __glutProcessDeviceEvents(XEvent * event) | ||||
| { | ||||
| #if !defined(_WIN32) | ||||
| @@ -262,18 +264,21 @@ __glutProcessDeviceEvents(XEvent * event) | ||||
| #else | ||||
|   { | ||||
|     JOYINFOEX info; | ||||
|     int njoyId = 0; | ||||
|     int nConnected = 0; | ||||
|     MMRESULT result; | ||||
|     JOYCAPS joyCaps; | ||||
|  | ||||
|     /* Loop through all possible joystick IDs until we get the error | ||||
|        JOYERR_PARMS. Count the number of times we get JOYERR_NOERROR | ||||
|        indicating an installed joystick driver with a joystick currently | ||||
|        attached to the port. */ | ||||
|     while ((result = joyGetPosEx(njoyId++,&info)) != JOYERR_PARMS) { | ||||
|       if (result == JOYERR_NOERROR) { | ||||
|         ++nConnected;  /* The count of connected joysticks. */ | ||||
|       } | ||||
|     memset(&info, 0, sizeof(JOYINFOEX));  | ||||
|     info.dwSize = sizeof(JOYINFOEX);  | ||||
|     info.dwFlags = JOY_RETURNALL; | ||||
|  | ||||
|     if (joyGetPosEx(JOYSTICKID1,&info) != JOYERR_NOERROR) { | ||||
|       __glutHasJoystick = 1; | ||||
|       joyGetDevCaps(JOYSTICKID1, &joyCaps, sizeof(joyCaps)); | ||||
|       __glutNumJoystickButtons = joyCaps.wNumButtons; | ||||
|       __glutNumJoystickAxes = joyCaps.wNumAxes; | ||||
|     } else { | ||||
|       __glutHasJoystick = 0; | ||||
|       __glutNumJoystickButtons = 0; | ||||
|       __glutNumJoystickAxes = 0; | ||||
|     } | ||||
|   } | ||||
| #endif /* !_WIN32 */ | ||||
|   | ||||
| @@ -7,8 +7,10 @@ | ||||
|  | ||||
| #ifdef _WIN32 | ||||
| #include <windows.h> | ||||
| #ifndef __CYGWIN32__ | ||||
| #include <mmsystem.h>  /* Win32 Multimedia API header. */ | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #include "glutint.h" | ||||
|  | ||||
|   | ||||
| @@ -24,7 +24,7 @@ | ||||
| #define GLUT_BUILDING_LIB  /* Building the GLUT library itself. */ | ||||
| #include <GL/glut.h> | ||||
|  | ||||
| #if defined( MESA ) && defined( _WIN32 ) | ||||
| #if defined(MESA) && defined(_WIN32) && !defined(__CYGWIN32__) | ||||
| #include <gl/mesa_wgl.h> | ||||
| #endif | ||||
|  | ||||
| @@ -71,7 +71,7 @@ extern int sys$gettim(struct timeval *); | ||||
| #endif | ||||
| #else | ||||
| #include <sys/types.h> | ||||
| #if !defined(_WIN32) | ||||
| #if !defined(_WIN32) || defined(__CYGWIN32__) | ||||
| #include <sys/time.h> | ||||
| #else | ||||
| #include <winsock.h> | ||||
|   | ||||
| @@ -40,9 +40,57 @@ | ||||
| #define XA_STRING 0 | ||||
|  | ||||
| /* Private routines from win32_util.c */ | ||||
| #ifndef __CYGWIN32__ | ||||
| extern int gettimeofday(struct timeval* tp, void* tzp); | ||||
| #endif | ||||
| extern void *__glutFont(void *font); | ||||
| extern int __glutGetTransparentPixel(Display *dpy, XVisualInfo *vinfo); | ||||
| extern void __glutAdjustCoords(Window parent, int *x, int *y, int *width, int *height); | ||||
|  | ||||
|  | ||||
| /* Cygwin B20.1 misses the following definitions */ | ||||
| #ifdef __CYGWIN32__ | ||||
|  | ||||
| /* from winuser.h */ | ||||
| #define CDS_FULLSCREEN 4 | ||||
|  | ||||
| /* from mmsystem.h */ | ||||
| #define WINMMAPI __declspec(dllimport) | ||||
| typedef UINT MMRESULT; | ||||
|  | ||||
| #define MM_JOY1MOVE 0x3A0 | ||||
| #define MM_JOY1ZMOVE 0x3A2 | ||||
| #define MM_JOY1BUTTONDOWN 0x3B5 | ||||
| #define MM_JOY1BUTTONUP 0x3B7 | ||||
|  | ||||
| #define JOYERR_NOERROR 0 | ||||
| #define JOYERR_PARMS 165 | ||||
|  | ||||
| #define JOY_RETURNALL 0x000000ffl | ||||
|  | ||||
| #define JOYSTICKID1 0 | ||||
|  | ||||
| typedef struct joyinfoex_tag { | ||||
|     DWORD dwSize;                /* size of structure */ | ||||
|     DWORD dwFlags;               /* flags to indicate what to return */ | ||||
|     DWORD dwXpos;                /* x position */ | ||||
|     DWORD dwYpos;                /* y position */ | ||||
|     DWORD dwZpos;                /* z position */ | ||||
|     DWORD dwRpos;                /* rudder/4th axis position */ | ||||
|     DWORD dwUpos;                /* 5th axis position */ | ||||
|     DWORD dwVpos;                /* 6th axis position */ | ||||
|     DWORD dwButtons;             /* button states */ | ||||
|     DWORD dwButtonNumber;        /* current button number pressed */ | ||||
|     DWORD dwPOV;                 /* point of view state */ | ||||
|     DWORD dwReserved1;           /* reserved for communication between winmm & driver */ | ||||
|     DWORD dwReserved2;           /* reserved for future expansion */ | ||||
| } JOYINFOEX, *PJOYINFOEX, /* NEAR */ *NPJOYINFOEX, /* FAR */ *LPJOYINFOEX; | ||||
|  | ||||
| WINMMAPI MMRESULT WINAPI joyGetPosEx( UINT uJoyID, LPJOYINFOEX pji); | ||||
| WINMMAPI MMRESULT WINAPI joyReleaseCapture( UINT uJoyID); | ||||
| WINMMAPI MMRESULT WINAPI joySetCapture( HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged); | ||||
| WINMMAPI MMRESULT WINAPI joySetThreshold( UINT uJoyID, UINT uThreshold); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #endif /* __glutwin32_h__ */ | ||||
|   | ||||
| @@ -129,26 +129,29 @@ __glutXGetLayerVisualInfo(Display * dpy, long lvinfo_mask, | ||||
|           break; | ||||
|         } | ||||
|     } | ||||
|     if (lvinfo_mask & VisualLayerMask) | ||||
|     if (lvinfo_mask & VisualLayerMask) { | ||||
|       if (overlayInfo == NULL) { | ||||
|         if (lvinfo_template->layer != 0) | ||||
|           continue; | ||||
|       } else if (lvinfo_template->layer != overlayInfo->layer) | ||||
|         continue; | ||||
|     if (lvinfo_mask & VisualTransparentType) | ||||
|     } | ||||
|     if (lvinfo_mask & VisualTransparentType) { | ||||
|       if (overlayInfo == NULL) { | ||||
|         if (lvinfo_template->type != None) | ||||
|           continue; | ||||
|       } else if (lvinfo_template->type != | ||||
|         overlayInfo->transparent_type) | ||||
|         continue; | ||||
|     if (lvinfo_mask & VisualTransparentValue) | ||||
|     } | ||||
|     if (lvinfo_mask & VisualTransparentValue) { | ||||
|       if (overlayInfo == NULL) | ||||
|         /* Non-overlay visuals have no sense of | ||||
|            TransparentValue. */ | ||||
|         continue; | ||||
|       else if (lvinfo_template->value != overlayInfo->value) | ||||
|         continue; | ||||
|     } | ||||
|     layerInfo[count].vinfo = *pVinfo; | ||||
|     if (overlayInfo == NULL) { | ||||
|       layerInfo[count].layer = 0; | ||||
|   | ||||
| @@ -11,11 +11,7 @@ | ||||
| #include "glutint.h" | ||||
| #include "glutstroke.h" | ||||
| #include "glutbitmap.h" | ||||
| #if defined(__CYGWIN32__) | ||||
| typedef MINMAXINFO* LPMINMAXINFO; | ||||
| #else | ||||
| #include <sys/timeb.h> | ||||
| #endif | ||||
|  | ||||
| /* The following added by Paul Garceau <pgarceau@teleport.com> */ | ||||
| #if defined(__MINGW32__) | ||||
| @@ -27,6 +23,7 @@ struct timeval; | ||||
| extern StrokeFontRec glutStrokeRoman, glutStrokeMonoRoman; | ||||
| extern BitmapFontRec glutBitmap8By13, glutBitmap9By15, glutBitmapTimesRoman10, glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12, glutBitmapHelvetica18; | ||||
|  | ||||
| #ifndef __CYGWIN32__ | ||||
| int | ||||
| gettimeofday(struct timeval* tp, void* tzp) | ||||
| { | ||||
| @@ -39,6 +36,7 @@ gettimeofday(struct timeval* tp, void* tzp) | ||||
|   /* 0 indicates that the call succeeded. */ | ||||
|   return 0; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| /* To get around the fact that Microsoft DLLs only allow functions | ||||
|    to be exported and now data addresses (as Unix DSOs support), the | ||||
|   | ||||
| @@ -8,13 +8,9 @@ | ||||
|  | ||||
|  | ||||
| #include "glutint.h" | ||||
| #if defined(__CYGWIN32__) | ||||
| typedef MINMAXINFO* LPMINMAXINFO; | ||||
| #else | ||||
| #include <sys/timeb.h> | ||||
| #endif | ||||
|  | ||||
| #ifdef _WIN32 | ||||
| #if defined(_WIN32) && !defined(__CYGWIN32__) | ||||
| #include <mmsystem.h>  /* Win32 Multimedia API header. */ | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -1,59 +1 @@ | ||||
| # Makefile for OpenGL widgets | ||||
|  | ||||
| # NOTE: widget code is from SGI.  See any of the .c or .h files for the | ||||
| # complete copyright.  Mesa's GNU copyright DOES NOT apply to this widget | ||||
| # code. | ||||
|  | ||||
|  | ||||
| ##### MACROS ##### | ||||
|  | ||||
| VPATH = RCS | ||||
|  | ||||
| INCDIRS = -I../include -I/usr/include/Motif1.2 -I/usr/X11R6/include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
| SOURCES = GLwDrawA.c GLwMDrawA.c | ||||
|  | ||||
|  | ||||
| OBJECTS = $(SOURCES:.c=.o) | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### RULES ##### | ||||
|  | ||||
| .c.o: | ||||
| 	$(CC) -c $(INCDIRS) $(CFLAGS) $< | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### TARGETS ##### | ||||
|  | ||||
| default: | ||||
| 	@echo "Specify a target configuration" | ||||
|  | ||||
| clean: | ||||
| 	-rm *.o *~ | ||||
|  | ||||
| # The name of the library file comes from Make-config | ||||
| #XXX GLW_LIB = libGLw.a | ||||
|  | ||||
| targets: $(LIBDIR)/$(GLW_LIB) | ||||
|  | ||||
|  | ||||
| # Make the library | ||||
| $(LIBDIR)/$(GLW_LIB): $(OBJECTS) | ||||
| 	$(MAKELIB) $(GLW_LIB) $(MAJOR) $(MINOR) $(OBJECTS) | ||||
| 	mv $(GLW_LIB)* $(LIBDIR) | ||||
|  | ||||
| include ../Make-config | ||||
|  | ||||
| include depend | ||||
|  | ||||
|  | ||||
|  | ||||
| # | ||||
| # Run 'make depend' to update the dependencies if you change what's included | ||||
| # by any source file. | ||||
| #  | ||||
| dep: $(SOURCES) | ||||
| 	makedepend -fdepend -Y -I../include $(SOURCES) | ||||
| include Makefile.X11 | ||||
|   | ||||
							
								
								
									
										73
									
								
								src/glw/Makefile.X11
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/glw/Makefile.X11
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| # Makefile for OpenGL widgets | ||||
|  | ||||
| # NOTE: widget code is from SGI.  See any of the .c or .h files for the | ||||
| # complete copyright.  Mesa's GNU copyright DOES NOT apply to this widget | ||||
| # code. | ||||
|  | ||||
|  | ||||
| ##### MACROS ##### | ||||
|  | ||||
| MAJOR = 1 | ||||
| MINOR = 0 | ||||
| TINY = 0 | ||||
|  | ||||
| VPATH = RCS | ||||
|  | ||||
| INCDIRS = -I../include -I/usr/include/Motif1.2 -I/usr/X11R6/include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
| # Compile GLwMDrawA.c only if you have Motif headers! | ||||
| #SOURCES = GLwDrawA.c GLwMDrawA.c | ||||
| SOURCES = GLwDrawA.c | ||||
|  | ||||
|  | ||||
| OBJECTS = $(SOURCES:.c=.o) | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### RULES ##### | ||||
|  | ||||
| .c.o: | ||||
| 	$(CC) -c $(INCDIRS) $(CFLAGS) $< | ||||
|  | ||||
|  | ||||
|  | ||||
| ##### TARGETS ##### | ||||
|  | ||||
| default: | ||||
| 	@echo "Specify a target configuration" | ||||
|  | ||||
| clean: | ||||
| 	-rm *.o *~ | ||||
|  | ||||
| targets: $(LIBDIR)/$(GLW_LIB) message | ||||
|  | ||||
|  | ||||
| # Make the library | ||||
| $(LIBDIR)/$(GLW_LIB): $(OBJECTS) | ||||
| 	$(MAKELIB) $(GLW_LIB) $(MAJOR) $(MINOR) $(TINY) $(OBJECTS) | ||||
| 	ls -l $(GLW_LIB) | ||||
| 	mv $(GLW_LIB)* $(LIBDIR) | ||||
| 	-mv *.a $(LIBDIR) | ||||
|  | ||||
|  | ||||
| message: | ||||
| 	@echo | ||||
| 	@echo "************************************************************************" | ||||
| 	@echo "*** Edit widgets-sgi/Makefile.X11 to enable Motif support, if needed ***" | ||||
| 	@echo "************************************************************************" | ||||
| 	@echo | ||||
|  | ||||
|  | ||||
| include ../Make-config | ||||
|  | ||||
| include depend | ||||
|  | ||||
|  | ||||
|  | ||||
| # | ||||
| # Run 'make depend' to update the dependencies if you change what's included | ||||
| # by any source file. | ||||
| #  | ||||
| dep: $(SOURCES) | ||||
| 	makedepend -fdepend -Y -I../include $(SOURCES) | ||||
| @@ -1,8 +1,8 @@ | ||||
| # $Id: Makefile.X11,v 1.7 1999/11/11 01:22:28 brianp Exp $ | ||||
| # $Id: Makefile.X11,v 1.6.2.5 2000/07/14 14:56:27 brianp Exp $ | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  3.3 | ||||
| # Copyright (C) 1995-1999  Brian Paul | ||||
| # Version:  3.2.1 | ||||
| # Copyright (C) 1995-2000  Brian Paul | ||||
|  | ||||
| # Makefile for core library | ||||
|  | ||||
| @@ -18,13 +18,13 @@ VPATH = RCS | ||||
| INCDIR = ../include | ||||
| LIBDIR = ../lib | ||||
|  | ||||
|  | ||||
| CORE_SOURCES = \ | ||||
| 	glapi.c \ | ||||
| 	glapinoop.c \ | ||||
| 	accum.c \ | ||||
| 	alpha.c \ | ||||
| 	alphabuf.c \ | ||||
| 	api1.c \ | ||||
| 	api2.c \ | ||||
| 	apiext.c \ | ||||
| 	attrib.c \ | ||||
| 	bbox.c \ | ||||
| 	bitmap.c \ | ||||
| @@ -37,7 +37,6 @@ CORE_SOURCES = \ | ||||
| 	cva.c \ | ||||
| 	debug_xform.c \ | ||||
| 	depth.c \ | ||||
| 	dispatch.c \ | ||||
| 	dlist.c \ | ||||
| 	drawpix.c \ | ||||
| 	enable.c \ | ||||
| @@ -50,19 +49,18 @@ CORE_SOURCES = \ | ||||
| 	glmisc.c \ | ||||
| 	hash.c \ | ||||
| 	image.c \ | ||||
| 	imaging.c \ | ||||
| 	light.c \ | ||||
| 	lines.c \ | ||||
| 	logic.c \ | ||||
| 	masking.c \ | ||||
| 	matrix.c \ | ||||
| 	mem.c \ | ||||
| 	mmath.c \ | ||||
| 	mthreads.c \ | ||||
| 	pb.c \ | ||||
| 	pixel.c \ | ||||
| 	pipeline.c \ | ||||
| 	points.c \ | ||||
| 	pointers.c \ | ||||
| 	polygon.c \ | ||||
| 	quads.c \ | ||||
| 	rastpos.c \ | ||||
| @@ -106,6 +104,11 @@ DRIVER_SOURCES = \ | ||||
| 	X/xmesa4.c \ | ||||
| 	OSmesa/osmesa.c \ | ||||
| 	SVGA/svgamesa.c \ | ||||
| 	SVGA/svgamesa8.c \ | ||||
| 	SVGA/svgamesa15.c \ | ||||
| 	SVGA/svgamesa16.c \ | ||||
| 	SVGA/svgamesa24.c \ | ||||
| 	SVGA/svgamesa32.c \ | ||||
| 	FX/fxapi.c \ | ||||
| 	FX/fxclip.c \ | ||||
| 	FX/fxcva.c \ | ||||
| @@ -169,6 +172,16 @@ X/xmesa4.o: X/xmesa4.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| SVGA/svgamesa.o: SVGA/svgamesa.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| SVGA/svgamesa8.o: SVGA/svgamesa8.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| SVGA/svgamesa15.o: SVGA/svgamesa15.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| SVGA/svgamesa16.o: SVGA/svgamesa16.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| SVGA/svgamesa24.o: SVGA/svgamesa24.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| SVGA/svgamesa32.o: SVGA/svgamesa32.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| OSmesa/osmesa.o: OSmesa/osmesa.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| FX/fxapi.o: FX/fxapi.c | ||||
| @@ -201,11 +214,7 @@ FX/fxvsetup.o: FX/fxvsetup.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| FX/fxglidew.o: FX/fxglidew.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| FX/X86/fx_3dnow_fastpath.o: FX/X86/fx_3dnow_fastpath.S FX/X86/fx_regoff.h | ||||
| FX/X86/fx_regoff.h: FX/X86/fx_gen_regoff | ||||
| 	$< > $@ | ||||
| FX/X86/fx_gen_regoff : FX/X86/fx_gen_regoff.c | ||||
| 	$(CC) -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| FX/X86/fx_3dnow_fastpath.o: FX/X86/fx_3dnow_fastpath.S | ||||
| GGI/ggimesa.o: GGI/ggimesa.c | ||||
| 	$(CC) -c -I. -I$(INCDIR) $(CFLAGS) $< -o $@ | ||||
| X86/x86.o: X86/x86.c | ||||
| @@ -222,7 +231,8 @@ X86/3dnow.o: X86/3dnow.c | ||||
| #	@echo "Specify a target configuration" | ||||
|  | ||||
| clean: | ||||
| 	-rm *.o *~ */*.o */*~ | ||||
| 	-rm *.o *~ */*.o */*~ *.lo *.la | ||||
| 	-rm -rf .libs | ||||
|  | ||||
| targets: $(LIBDIR)/$(GL_LIB) | ||||
|  | ||||
|   | ||||
							
								
								
									
										8
									
								
								src/mesa/drivers/ggi/default/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/mesa/drivers/ggi/default/.cvsignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| genkgi.conf | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.o | ||||
| *.la | ||||
							
								
								
									
										8
									
								
								src/mesa/drivers/ggi/display/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/mesa/drivers/ggi/display/.cvsignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| fbdev.conf | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.o | ||||
| *.la | ||||
							
								
								
									
										7
									
								
								src/mesa/drivers/ggi/include/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/mesa/drivers/ggi/include/.cvsignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.o | ||||
| *.la | ||||
							
								
								
									
										7
									
								
								src/mesa/drivers/ggi/include/ggi/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/mesa/drivers/ggi/include/ggi/.cvsignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.o | ||||
| *.la | ||||
							
								
								
									
										7
									
								
								src/mesa/drivers/ggi/include/ggi/mesa/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/mesa/drivers/ggi/include/ggi/mesa/.cvsignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.o | ||||
| *.la | ||||
| @@ -1,24 +1,52 @@ | ||||
| /* -*- mode: C; tab-width:8;  -*- | ||||
|  | ||||
|              fxapi.c - 3Dfx VooDoo/Mesa interface | ||||
| */ | ||||
| /* -*- mode: C; tab-width:8;  -*- */ | ||||
|  | ||||
| /* | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  ******************************************************************** | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* fxapi.c - 3Dfx VooDoo/Mesa interface */ | ||||
|  | ||||
|  | ||||
| /******************************************************************** | ||||
|  * | ||||
|  * Function names: | ||||
|  *  fxMesa....     (The driver API) | ||||
| @@ -820,9 +848,10 @@ void fxsignals() | ||||
| /* | ||||
|  * Create a new FX/Mesa context and return a handle to it. | ||||
|  */ | ||||
| fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res, | ||||
| 					   GrScreenRefresh_t ref, | ||||
| 					   const GLint attribList[]) | ||||
| fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win, | ||||
|                                              GrScreenResolution_t res, | ||||
|                                              GrScreenRefresh_t ref, | ||||
|                                              const GLint attribList[]) | ||||
| { | ||||
|    fxMesaContext fxMesa = NULL; | ||||
|    int i,type; | ||||
| @@ -835,8 +864,10 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res | ||||
|    GLint accumSize=0; | ||||
|    GLcontext *shareCtx = NULL; | ||||
|    GLcontext *ctx = 0; | ||||
|    FX_GrContext_t glideContext = 0; | ||||
|    /*FX_GrContext_t glideContext = 0;*/ | ||||
|    char *errorstr; | ||||
|    GLboolean useBGR; | ||||
|    char *system = NULL; | ||||
|  | ||||
|    if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|       fprintf(stderr,"fxmesa: fxMesaCreateContext() Start\n"); | ||||
| @@ -928,24 +959,116 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res | ||||
|    fxMesa->verbose=verbose; | ||||
|    fxMesa->board=glbCurrentBoard; | ||||
|  | ||||
|  | ||||
|    fxMesa->glideContext = FX_grSstWinOpen((FxU32)win,res,ref, | ||||
| #if  FXMESA_USE_ARGB | ||||
| 					  GR_COLORFORMAT_ARGB, | ||||
|    fxMesa->glideContext = FX_grSstWinOpen((FxU32)win,res,ref, | ||||
| 					GR_COLORFORMAT_ARGB, | ||||
| 					GR_ORIGIN_LOWER_LEFT, | ||||
| 					2,aux); | ||||
| #else | ||||
| 					  GR_COLORFORMAT_ABGR, | ||||
|    fxMesa->glideContext = FX_grSstWinOpen((FxU32)win,res,ref, | ||||
| 					GR_COLORFORMAT_ABGR, | ||||
| 					GR_ORIGIN_LOWER_LEFT, | ||||
| 					2,aux); | ||||
| #endif | ||||
| 					  GR_ORIGIN_LOWER_LEFT, | ||||
| 					  2,aux); | ||||
|    if (!fxMesa->glideContext){ | ||||
|       errorstr = "grSstWinOpen";  | ||||
|       goto errorhandler; | ||||
|    } | ||||
|     | ||||
|    /* | ||||
|     * Pixel tables are use during pixel read-back | ||||
|     * Either initialize them for RGB or BGR order. | ||||
|     */ | ||||
| #if FXMESA_USE_ARGB  | ||||
|    useBGR = GL_FALSE; /* Force RGB pixel order */        | ||||
|    system = "FXMESA_USE_ARGB"; | ||||
| #else | ||||
|    if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) { | ||||
|       /* jk991130 - Voodoo 3s don't use BGR. Query the # of TMUs | ||||
|        * as Voodoo3s have 2 TMUs on board, Banshee has only 1 | ||||
|        * bk000413 - another suggestion from Joseph Kain is using | ||||
|        *  VendorID 0x121a for all 3dfx boards | ||||
|        *   DeviceID VG  1/V2  2/VB  3/V3  5 | ||||
|        * For now we cehck for known BGR devices, and presume | ||||
|        *  everything else to be a V3/RGB. | ||||
|        */ | ||||
|       GrVoodooConfig_t *voodoo; | ||||
|       voodoo = &glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig; | ||||
|  | ||||
|       if (voodoo->nTexelfx == 1) { | ||||
|          /* Voodoo1 or Banshee */ | ||||
|          useBGR = GL_TRUE; | ||||
|          system = "Voodoo1"; | ||||
|       } | ||||
|       else if (voodoo->nTexelfx == 2 && | ||||
|                voodoo->fbiRev == 260 && | ||||
|                voodoo->tmuConfig[0].tmuRev == 4 && | ||||
|                (voodoo->tmuConfig[0].tmuRam == 2 || | ||||
|                 voodoo->tmuConfig[0].tmuRam == 4)) { | ||||
|          /* Voodoo 2 */ | ||||
|          useBGR = GL_TRUE; | ||||
|          system = "Voodoo2"; | ||||
|       } | ||||
|       else if (voodoo->nTexelfx == 2 && | ||||
|                voodoo->fbiRev == 2 && | ||||
|                voodoo->tmuConfig[0].tmuRev == 1 && | ||||
|                voodoo->tmuConfig[0].tmuRam == 4) { | ||||
|          /* Quantum3D Obsidian 50/100 */ | ||||
|          useBGR = GL_TRUE; | ||||
|          system = "Quantum3D Obsidian"; | ||||
|       } | ||||
|       else  | ||||
|          /* Brian | ||||
|           *       (voodoo->nTexelfx == 2 && | ||||
|           *        voodoo->fbiRev == 0 && | ||||
|           *        voodoo->tmuConfig[0].tmuRev == 148441048 && | ||||
|           *        voodoo->tmuConfig[0].tmuRam == 3) | ||||
|           * Bernd  | ||||
|           *       (voodoo->nTexelfx == 2 && | ||||
|           *        voodoo->fbiRev ==  69634 && | ||||
|           *        voodoo->tmuConfig[0].tmuRev == 69634 && | ||||
|           *        voodoo->tmuConfig[0].tmuRam == 2 ) | ||||
|           */ | ||||
|       { | ||||
|          /* Presumed Voodoo3 */ | ||||
|          useBGR =  GL_FALSE; | ||||
|          system = "Voodoo3"; | ||||
|       } | ||||
|       if (getenv("MESA_FX_INFO")) {  | ||||
|         printf("Voodoo: Texelfx: %d / FBI Rev.: %d / TMU Rev.: %d / TMU RAM: %d\n", | ||||
|                voodoo->nTexelfx, | ||||
|                voodoo->fbiRev, | ||||
|                voodoo->tmuConfig[0].tmuRev, | ||||
|                voodoo->tmuConfig[0].tmuRam ); | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       useBGR = GL_FALSE; /* use RGB pixel order otherwise */ | ||||
|       system = "non-voodoo"; | ||||
|    } | ||||
| #endif /*FXMESA_USE_ARGB*/ | ||||
|  | ||||
|    if (getenv("MESA_FX_INFO"))  | ||||
|       printf("Voodoo pixel order: %s (%s)\n", useBGR ? "BGR" : "RGB", system); | ||||
|  | ||||
|    fxInitPixelTables(fxMesa, useBGR); | ||||
|  | ||||
|    fxMesa->width=FX_grSstScreenWidth(); | ||||
|    fxMesa->height=FX_grSstScreenHeight(); | ||||
|  | ||||
|    fxMesa->clipMinX = 0; | ||||
|    fxMesa->clipMaxX = fxMesa->width; | ||||
|    fxMesa->clipMinY = 0; | ||||
|    fxMesa->clipMaxY = fxMesa->height; | ||||
|  | ||||
|    fxMesa->screen_width = fxMesa->width; | ||||
|    fxMesa->screen_height = fxMesa->height; | ||||
|    fxMesa->x_offset = 0; | ||||
|    fxMesa->y_offset = 0; | ||||
|    fxMesa->y_delta = 0; | ||||
|     | ||||
|    fxMesa->needClip = 0; | ||||
|  | ||||
|    if(verbose) | ||||
|       fprintf(stderr,"Glide screen size: %dx%d\n", | ||||
|               (int)FX_grSstScreenWidth(),(int)FX_grSstScreenHeight()); | ||||
| @@ -989,7 +1112,8 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res | ||||
|  | ||||
|    /* install signal handlers */ | ||||
| #if defined(__linux__) | ||||
|    if (fxMesa->glCtx->CatchSignals) { | ||||
|    /* Only install if environment var. is not set. */ | ||||
|    if (fxMesa->glCtx->CatchSignals && !getenv("MESA_FX_NO_SIGNALS")) { | ||||
|       signal(SIGINT,cleangraphics_handler); | ||||
|       signal(SIGHUP,cleangraphics_handler); | ||||
|       signal(SIGPIPE,cleangraphics_handler); | ||||
| @@ -1204,7 +1328,7 @@ int GLAPIENTRY fxQueryHardware(void) | ||||
|         char buf[80]; | ||||
|                          | ||||
|         FX_grGlideGetVersion(buf); | ||||
|         fprintf(stderr,"Using Glide V%s\n",0); | ||||
|         fprintf(stderr,"Using Glide V%s\n",""); | ||||
|         fprintf(stderr,"Number of boards: %d\n",glbHWConfig.num_sst); | ||||
|  | ||||
|         if(glbHWConfig.SSTs[glbCurrentBoard].type==GR_SSTTYPE_VOODOO) { | ||||
| @@ -1214,6 +1338,8 @@ int GLAPIENTRY fxQueryHardware(void) | ||||
|                   glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.fbRam); | ||||
|           fprintf(stderr,"Number of TMUs: %d\n", | ||||
|                   glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.nTexelfx); | ||||
|           fprintf(stderr,"fbiRev: %d\n", | ||||
|                   glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.fbiRev); | ||||
|           fprintf(stderr,"SLI detected: %d\n", | ||||
|                   glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.sliDetect); | ||||
|         } else if(glbHWConfig.SSTs[glbCurrentBoard].type==GR_SSTTYPE_SST96) { | ||||
| @@ -1232,7 +1358,10 @@ int GLAPIENTRY fxQueryHardware(void) | ||||
| #if defined(__WIN32__) | ||||
|     onexit((_onexit_t)cleangraphics); | ||||
| #elif defined(__linux__) | ||||
|     atexit(cleangraphics); | ||||
|     /* Only register handler if environment variable is not defined. */ | ||||
|     if (!getenv("MESA_FX_NO_SIGNALS")) { | ||||
| 	atexit(cleangraphics); | ||||
|     } | ||||
| #endif | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -1,28 +1,51 @@ | ||||
| /* -*- mode: C; tab-width:8;  -*- | ||||
|  | ||||
|              fxdd.c - 3Dfx VooDoo Mesa device driver functions | ||||
| */ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * See the file fxapi.c for more informations about authors | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* fxdd.c - 3Dfx VooDoo Mesa device driver functions */ | ||||
|  | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
| @@ -34,6 +57,46 @@ | ||||
| #include "enums.h" | ||||
| #include "extensions.h" | ||||
|  | ||||
|  | ||||
| /* These lookup table are used to extract RGB values in [0,255] from | ||||
|  * 16-bit pixel values. | ||||
|  */ | ||||
| GLubyte FX_PixelToR[0x10000]; | ||||
| GLubyte FX_PixelToG[0x10000]; | ||||
| GLubyte FX_PixelToB[0x10000]; | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Initialize the FX_PixelTo{RGB} arrays. | ||||
|  * Input: bgrOrder - if TRUE, pixels are in BGR order, else RGB order. | ||||
|  */ | ||||
| void fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder) | ||||
| { | ||||
|   GLuint pixel; | ||||
|  | ||||
|   fxMesa->bgrOrder=bgrOrder; | ||||
|   for (pixel = 0; pixel <= 0xffff; pixel++) { | ||||
|     GLuint r, g, b; | ||||
|     if (bgrOrder) { | ||||
|       r = (pixel & 0x001F) << 3; | ||||
|       g = (pixel & 0x07E0) >> 3; | ||||
|       b = (pixel & 0xF800) >> 8; | ||||
|     } | ||||
|     else { | ||||
|       r = (pixel & 0xF800) >> 8; | ||||
|       g = (pixel & 0x07E0) >> 3; | ||||
|       b = (pixel & 0x001F) << 3; | ||||
|     } | ||||
|     r = r * 255 / 0xF8;  /* fill in low-order bits */ | ||||
|     g = g * 255 / 0xFC; | ||||
|     b = b * 255 / 0xF8; | ||||
|     FX_PixelToR[pixel] = r; | ||||
|     FX_PixelToG[pixel] = g; | ||||
|     FX_PixelToB[pixel] = b; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| /**********************************************************************/ | ||||
| /*****                 Miscellaneous functions                    *****/ | ||||
| /**********************************************************************/ | ||||
| @@ -45,10 +108,11 @@ void fxDDDither(GLcontext *ctx, GLboolean enable) | ||||
|     fprintf(stderr,"fxmesa: fxDDDither()\n"); | ||||
|   } | ||||
|  | ||||
|   if(enable) | ||||
|     grDitherMode(GR_DITHER_4x4); | ||||
|   else | ||||
|     grDitherMode(GR_DITHER_DISABLE); | ||||
|   if (enable) { | ||||
|     FX_grDitherMode(GR_DITHER_4x4); | ||||
|   } else { | ||||
|     FX_grDitherMode(GR_DITHER_DISABLE); | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -121,14 +185,14 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|     /* clear color and depth buffer */ | ||||
|  | ||||
|     if (ctx->Color.DrawDestMask & BACK_LEFT_BIT) { | ||||
|       grRenderBuffer(GR_BUFFER_BACKBUFFER); | ||||
|       grBufferClear(fxMesa->clearC, fxMesa->clearA, | ||||
|                     (FxU16)(ctx->Depth.Clear*0xffff)); | ||||
|       FX_grRenderBuffer(GR_BUFFER_BACKBUFFER); | ||||
|       FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, | ||||
| 		       (FxU16)(ctx->Depth.Clear*0xffff)); | ||||
|     } | ||||
|     if (ctx->Color.DrawDestMask & FRONT_LEFT_BIT) { | ||||
|        grRenderBuffer(GR_BUFFER_FRONTBUFFER); | ||||
|        grBufferClear(fxMesa->clearC, fxMesa->clearA, | ||||
|                      (FxU16)(ctx->Depth.Clear*0xffff)); | ||||
|       FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER); | ||||
|       FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, | ||||
| 		       (FxU16)(ctx->Depth.Clear*0xffff)); | ||||
|     } | ||||
|  | ||||
|     newmask=mask & (~(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)); | ||||
| @@ -137,19 +201,20 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|     /* clear color buffer */ | ||||
|  | ||||
|     if(ctx->Color.ColorMask) { | ||||
|       grDepthMask(FXFALSE); | ||||
|       FX_grDepthMask(FXFALSE); | ||||
|  | ||||
|       if (ctx->Color.DrawDestMask & BACK_LEFT_BIT) { | ||||
|         grRenderBuffer(GR_BUFFER_BACKBUFFER); | ||||
|         grBufferClear(fxMesa->clearC, fxMesa->clearA, 0); | ||||
|         FX_grRenderBuffer(GR_BUFFER_BACKBUFFER); | ||||
|         FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, 0); | ||||
|       } | ||||
|       if (ctx->Color.DrawDestMask & FRONT_LEFT_BIT) { | ||||
|         grRenderBuffer(GR_BUFFER_FRONTBUFFER); | ||||
|         grBufferClear(fxMesa->clearC, fxMesa->clearA, 0); | ||||
|         FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER); | ||||
|         FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, 0); | ||||
|       } | ||||
|  | ||||
|       if(ctx->Depth.Mask) | ||||
|         grDepthMask(FXTRUE); | ||||
|       if(ctx->Depth.Mask) { | ||||
|         FX_grDepthMask(FXTRUE); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     newmask=mask & (~(GL_COLOR_BUFFER_BIT)); | ||||
| @@ -158,14 +223,14 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|     /* clear depth buffer */ | ||||
|  | ||||
|     if(ctx->Depth.Mask) { | ||||
|       grColorMask(FXFALSE,FXFALSE); | ||||
|       grBufferClear(fxMesa->clearC, fxMesa->clearA, | ||||
|                     (FxU16)(ctx->Depth.Clear*0xffff)); | ||||
|       FX_grColorMask(FXFALSE,FXFALSE); | ||||
|       FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, | ||||
| 		       (FxU16)(ctx->Depth.Clear*0xffff)); | ||||
|  | ||||
|       grColorMask(ctx->Color.ColorMask[RCOMP] || | ||||
|                   ctx->Color.ColorMask[GCOMP] || | ||||
|                   ctx->Color.ColorMask[BCOMP], | ||||
|                   ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer); | ||||
|       FX_grColorMask(ctx->Color.ColorMask[RCOMP] || | ||||
| 		     ctx->Color.ColorMask[GCOMP] || | ||||
| 		     ctx->Color.ColorMask[BCOMP], | ||||
| 		     ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer); | ||||
|     } | ||||
|  | ||||
|     newmask=mask & (~(GL_DEPTH_BUFFER_BIT)); | ||||
| @@ -190,12 +255,12 @@ static GLboolean fxDDSetBuffer(GLcontext *ctx, GLenum mode ) | ||||
|  | ||||
|   if (mode == GL_FRONT_LEFT) { | ||||
|     fxMesa->currentFB = GR_BUFFER_FRONTBUFFER; | ||||
|     grRenderBuffer(fxMesa->currentFB); | ||||
|     FX_grRenderBuffer(fxMesa->currentFB); | ||||
|     return GL_TRUE; | ||||
|   } | ||||
|   else if (mode == GL_BACK_LEFT) { | ||||
|     fxMesa->currentFB = GR_BUFFER_BACKBUFFER; | ||||
|     grRenderBuffer(fxMesa->currentFB); | ||||
|     FX_grRenderBuffer(fxMesa->currentFB); | ||||
|     return GL_TRUE; | ||||
|   } | ||||
|   else { | ||||
| @@ -204,6 +269,22 @@ static GLboolean fxDDSetBuffer(GLcontext *ctx, GLenum mode ) | ||||
| } | ||||
|  | ||||
|  | ||||
| #ifdef XF86DRI | ||||
| static GLboolean inClipRects(fxMesaContext fxMesa, int px, int py) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
|   py=fxMesa->height+fxMesa->y_offset-py; | ||||
|   for (i=0; i<fxMesa->numClipRects; i++) { | ||||
|     if ((px>=fxMesa->pClipRects[i].x1) &&  | ||||
| 	(px<fxMesa->pClipRects[i].x2) && | ||||
| 	(py>=fxMesa->pClipRects[i].y1) &&  | ||||
| 	(py<fxMesa->pClipRects[i].y2)) return GL_TRUE; | ||||
|   } | ||||
|   return GL_FALSE; | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py, | ||||
|                                 GLsizei width, GLsizei height, | ||||
| @@ -241,10 +322,16 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py, | ||||
|         ymax=fxMesa->height; | ||||
|   } | ||||
|  | ||||
|   xmin+=fxMesa->x_offset; | ||||
|   xmax+=fxMesa->x_offset; | ||||
|  | ||||
| #define ISCLIPPED(rx) ( ((rx)<xmin) || ((rx)>=xmax) ) | ||||
| #ifdef XF86DRI | ||||
| #define ISCLIPPED(rx, ry) ( ((rx)<xmin) || ((rx)>=xmax) || !inClipRects(fxMesa, rx, ry)) | ||||
| #else | ||||
| #define ISCLIPPED(rx, ry) ( ((rx)<xmin) || ((rx)>=xmax) ) | ||||
| #endif | ||||
| #define DRAWBIT(i) {       \ | ||||
|   if(!ISCLIPPED(x+px))     \ | ||||
|   if(!ISCLIPPED(x+px, y))  \ | ||||
|     if( (*pb) & (1<<(i)) ) \ | ||||
|       (*p)=color;          \ | ||||
|   p++;                     \ | ||||
| @@ -258,7 +345,7 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py, | ||||
|   scrwidth=fxMesa->width; | ||||
|   scrheight=fxMesa->height; | ||||
|  | ||||
|   if((px>=scrwidth) || (px+width<=0) || (py>=scrheight) || (py+height<=0)) | ||||
|   if ((px>=scrwidth) || (px+width<=0) || (py>=scrheight) || (py+height<=0)) | ||||
|     return GL_TRUE; | ||||
|  | ||||
|   pb=bitmap; | ||||
| @@ -269,16 +356,16 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py, | ||||
|     py=0; | ||||
|   } | ||||
|  | ||||
|   if(py+height>=scrheight) | ||||
|   if (py+height>=scrheight) | ||||
|     height-=(py+height)-scrheight; | ||||
|  | ||||
|   info.size=sizeof(info); | ||||
|   if(!grLfbLock(GR_LFB_WRITE_ONLY, | ||||
|                 fxMesa->currentFB, | ||||
|                 GR_LFBWRITEMODE_565, | ||||
|                 GR_ORIGIN_UPPER_LEFT, | ||||
|                 FXFALSE, | ||||
|                 &info)) { | ||||
|   if(!FX_grLfbLock(GR_LFB_WRITE_ONLY, | ||||
| 		   fxMesa->currentFB, | ||||
| 		   GR_LFBWRITEMODE_565, | ||||
| 		   GR_ORIGIN_UPPER_LEFT, | ||||
| 		   FXFALSE, | ||||
| 		   &info)) { | ||||
| #ifndef FX_SILENT | ||||
|     fprintf(stderr,"fx Driver: error locking the linear frame buffer\n"); | ||||
| #endif | ||||
| @@ -289,22 +376,28 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py, | ||||
|   g=(GLint)(ctx->Current.RasterColor[1]*255.0f); | ||||
|   b=(GLint)(ctx->Current.RasterColor[2]*255.0f); | ||||
|   a=(GLint)(ctx->Current.RasterColor[3]*255.0f); | ||||
|   color=(FxU16) | ||||
|     ( ((FxU16)0xf8 & b) <<(11-3))  | | ||||
|     ( ((FxU16)0xfc & g) <<(5-3+1)) | | ||||
|     ( ((FxU16)0xf8 & r) >> 3); | ||||
|   if (fxMesa->bgrOrder) | ||||
|     color=(FxU16) | ||||
|       ( ((FxU16)0xf8 & b) <<(11-3))  | | ||||
|       ( ((FxU16)0xfc & g) <<(5-3+1)) | | ||||
|       ( ((FxU16)0xf8 & r) >> 3); | ||||
|   else | ||||
|     color=(FxU16) | ||||
|       ( ((FxU16)0xf8 & r) <<(11-3))  | | ||||
|       ( ((FxU16)0xfc & g) <<(5-3+1)) | | ||||
|       ( ((FxU16)0xf8 & b) >> 3); | ||||
|  | ||||
|   stride=info.strideInBytes>>1; | ||||
|  | ||||
|   /* This code is a bit slow... */ | ||||
|  | ||||
|   for(y=py;y<(py+height);y++) { | ||||
|   if (py>ymin) ymin=py; | ||||
|   if (py+height<ymax) ymax=py+height; | ||||
|  | ||||
|     if (y>=ymax) | ||||
|         break; | ||||
|   px+=fxMesa->x_offset; | ||||
|   scrheight=fxMesa->height+fxMesa->y_offset; | ||||
|  | ||||
|     if (y<=ymin) | ||||
|         continue; | ||||
|   for(y=ymin; y<ymax; y++) { | ||||
|  | ||||
|     p=((FxU16 *)info.lfbPtr)+px+((scrheight-y)*stride); | ||||
|  | ||||
| @@ -315,7 +408,7 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py, | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   grLfbUnlock(GR_LFB_WRITE_ONLY,fxMesa->currentFB); | ||||
|   FX_grLfbUnlock(GR_LFB_WRITE_ONLY,fxMesa->currentFB); | ||||
|  | ||||
| #undef ISCLIPPED | ||||
| #undef DRAWBIT | ||||
| @@ -347,8 +440,6 @@ void fxDDSetNearFar(GLcontext *ctx, GLfloat n, GLfloat f) | ||||
| { | ||||
|    FX_CONTEXT(ctx)->new_state |= FX_NEW_FOG; | ||||
|    ctx->Driver.RenderStart = fxSetupFXUnits; | ||||
|  | ||||
|    FX_CONTEXT(ctx)->wscale = fabs(f)/65535.0f; | ||||
| } | ||||
|  | ||||
| /* KW: Put the word Mesa in the render string because quakeworld | ||||
| @@ -459,13 +550,13 @@ int fxDDInitFxMesaContext( fxMesaContext fxMesa ) | ||||
|    fxMesa->unitsState.depthMask		=GL_TRUE; | ||||
|    fxMesa->unitsState.depthTestFunc	=GR_CMP_LESS; | ||||
|  | ||||
|    grColorMask(FXTRUE, fxMesa->haveAlphaBuffer ? FXTRUE : FXFALSE); | ||||
|    FX_grColorMask(FXTRUE, fxMesa->haveAlphaBuffer ? FXTRUE : FXFALSE); | ||||
|    if(fxMesa->haveDoubleBuffer) { | ||||
|       fxMesa->currentFB=GR_BUFFER_BACKBUFFER; | ||||
|       grRenderBuffer(GR_BUFFER_BACKBUFFER); | ||||
|       FX_grRenderBuffer(GR_BUFFER_BACKBUFFER); | ||||
|    } else { | ||||
|       fxMesa->currentFB=GR_BUFFER_FRONTBUFFER; | ||||
|       grRenderBuffer(GR_BUFFER_FRONTBUFFER); | ||||
|       FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER); | ||||
|    } | ||||
|    | ||||
|    fxMesa->state 	= NULL; | ||||
| @@ -481,10 +572,10 @@ int fxDDInitFxMesaContext( fxMesaContext fxMesa ) | ||||
|    } | ||||
|  | ||||
|    if(fxMesa->haveZBuffer) | ||||
|       grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER); | ||||
|       FX_grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER); | ||||
|      | ||||
| #if (!FXMESA_USE_ARGB) | ||||
|    grLfbWriteColorFormat(GR_COLORFORMAT_ABGR); /* Not every Glide has this  */ | ||||
|    FX_grLfbWriteColorFormat(GR_COLORFORMAT_ABGR); /* Not every Glide has this */ | ||||
| #endif | ||||
|  | ||||
|    fxMesa->glCtx->Const.MaxTextureLevels=9; | ||||
| @@ -505,7 +596,7 @@ int fxDDInitFxMesaContext( fxMesaContext fxMesa ) | ||||
|  | ||||
|    fxDDSetNearFar(fxMesa->glCtx,1.0,100.0); | ||||
|    | ||||
|    grGlideGetState((GrState*)fxMesa->state); | ||||
|    FX_grGlideGetState((GrState*)fxMesa->state); | ||||
|  | ||||
|    /* XXX Fix me: callback not registered when main VB is created. | ||||
|     */ | ||||
| @@ -546,6 +637,12 @@ void fxDDInitExtensions( GLcontext *ctx ) | ||||
|       gl_extensions_disable( ctx, "GL_ARB_multitexture" ); | ||||
| } | ||||
|  | ||||
| /* | ||||
|   This driver may need to move the drawing operations to a different sub | ||||
|   window. This modifies the viewport command to add our X,Y offset to all | ||||
|   drawn objects that go through the viewport transformation. | ||||
| */ | ||||
|  | ||||
| /************************************************************************/ | ||||
| /************************************************************************/ | ||||
| /************************************************************************/ | ||||
| @@ -591,16 +688,19 @@ static GLboolean fxIsInHardware(GLcontext *ctx) | ||||
|        /* Not very well written ... */ | ||||
|        ((ctx->Enabled & (TEXTURE0_1D | TEXTURE1_1D)) &&  | ||||
|         ((ctx->Enabled & (TEXTURE0_2D | TEXTURE1_2D))!=(TEXTURE0_2D | TEXTURE1_2D))) | ||||
|        ) | ||||
|        ) { | ||||
|       return GL_FALSE; | ||||
|     } | ||||
|  | ||||
|     if((ctx->Texture.ReallyEnabled & TEXTURE0_2D) && | ||||
|        (ctx->Texture.Unit[0].EnvMode==GL_BLEND)) | ||||
|        (ctx->Texture.Unit[0].EnvMode==GL_BLEND)) { | ||||
|       return GL_FALSE; | ||||
|     } | ||||
|  | ||||
|     if((ctx->Texture.ReallyEnabled & TEXTURE1_2D) && | ||||
|        (ctx->Texture.Unit[1].EnvMode==GL_BLEND)) | ||||
|        (ctx->Texture.Unit[1].EnvMode==GL_BLEND)) { | ||||
|       return GL_FALSE; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     if (MESA_VERBOSE & (VERBOSE_DRIVER|VERBOSE_TEXTURE)) | ||||
| @@ -617,8 +717,9 @@ static GLboolean fxIsInHardware(GLcontext *ctx) | ||||
|        /* Can't use multipass to blend a multitextured triangle - fall | ||||
| 	* back to software. | ||||
| 	*/ | ||||
|        if (!fxMesa->haveTwoTMUs && ctx->Color.BlendEnabled)  | ||||
|       if (!fxMesa->haveTwoTMUs && ctx->Color.BlendEnabled) { | ||||
| 	  return GL_FALSE; | ||||
|       } | ||||
| 	   | ||||
|        if ((ctx->Texture.Unit[0].EnvMode!=ctx->Texture.Unit[1].EnvMode) && | ||||
| 	   (ctx->Texture.Unit[0].EnvMode!=GL_MODULATE) && | ||||
| @@ -626,7 +727,6 @@ static GLboolean fxIsInHardware(GLcontext *ctx) | ||||
|        { | ||||
| 	  if (MESA_VERBOSE&VERBOSE_DRIVER) | ||||
| 	    fprintf(stderr, "fxMesa: unsupported multitex env mode\n"); | ||||
|  | ||||
| 	  return GL_FALSE; | ||||
|        } | ||||
|     } | ||||
| @@ -635,13 +735,15 @@ static GLboolean fxIsInHardware(GLcontext *ctx) | ||||
|        /* Not very well written ... */ | ||||
|        ((ctx->Enabled & TEXTURE0_1D) &&  | ||||
|         (!(ctx->Enabled & TEXTURE0_2D))) | ||||
|        ) | ||||
|        ) { | ||||
|       return GL_FALSE; | ||||
|     } | ||||
|  | ||||
|      | ||||
|     if((ctx->Texture.ReallyEnabled & TEXTURE0_2D) && | ||||
|        (ctx->Texture.Unit[0].EnvMode==GL_BLEND)) | ||||
|        (ctx->Texture.Unit[0].EnvMode==GL_BLEND)) { | ||||
|       return GL_FALSE; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return GL_TRUE; | ||||
| @@ -680,11 +782,11 @@ static void fxDDUpdateDDPointers(GLcontext *ctx) | ||||
|     ctx->Driver.LineFunc=fxMesa->LineFunc; | ||||
|     ctx->Driver.TriangleFunc=fxMesa->TriangleFunc; | ||||
|     ctx->Driver.QuadFunc=fxMesa->QuadFunc; | ||||
|   } else  | ||||
|   } else { | ||||
|      fxMesa->render_index = FX_FALLBACK; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| void fxSetupDDPointers(GLcontext *ctx) | ||||
| { | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
| @@ -748,7 +850,6 @@ void fxSetupDDPointers(GLcontext *ctx) | ||||
|   ctx->Driver.CullFace=fxDDCullFace; | ||||
|   ctx->Driver.ShadeModel=fxDDShadeModel; | ||||
|   ctx->Driver.Enable=fxDDEnable; | ||||
|    | ||||
|  | ||||
|   ctx->Driver.RegisterVB=fxDDRegisterVB; | ||||
|   ctx->Driver.UnregisterVB=fxDDUnregisterVB; | ||||
| @@ -786,3 +887,4 @@ int gl_fx_dummy_function_dd(void) | ||||
| } | ||||
|  | ||||
| #endif  /* FX */ | ||||
|  | ||||
|   | ||||
| @@ -1,27 +1,51 @@ | ||||
| /* -*- mode: C; tab-width:8;  -*- | ||||
|  | ||||
|              fxdd.c - 3Dfx VooDoo Mesa span and pixel functions | ||||
| */ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * See the file fxapi.c for more informations about authors | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* fxdd.c - 3Dfx VooDoo Mesa span and pixel functions */ | ||||
|  | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
| @@ -42,6 +66,72 @@ | ||||
|  | ||||
| #if !defined(FXMESA_USE_ARGB)  | ||||
|  | ||||
|  | ||||
| #if defined(FX_GLIDE3) && defined(XF86DRI) | ||||
|  | ||||
| static FxBool writeRegionClipped(fxMesaContext fxMesa, GrBuffer_t dst_buffer, | ||||
| 			  FxU32 dst_x, FxU32 dst_y, GrLfbSrcFmt_t src_format, | ||||
| 			  FxU32 src_width, FxU32 src_height, FxI32 src_stride, | ||||
| 			  void *src_data); | ||||
|  | ||||
| FxBool writeRegionClipped(fxMesaContext fxMesa, GrBuffer_t dst_buffer, | ||||
| 			  FxU32 dst_x, FxU32 dst_y, GrLfbSrcFmt_t src_format, | ||||
| 			  FxU32 src_width, FxU32 src_height, FxI32 src_stride, | ||||
| 			  void *src_data) | ||||
| { | ||||
|   int i, x, w, srcElt; | ||||
|   void *data; | ||||
|  | ||||
|   if (src_width==1 && src_height==1) { /* Easy case writing a point */ | ||||
|     for (i=0; i<fxMesa->numClipRects; i++) { | ||||
|       if ((dst_x>=fxMesa->pClipRects[i].x1) &&  | ||||
| 	  (dst_x<fxMesa->pClipRects[i].x2) && | ||||
| 	  (dst_y>=fxMesa->pClipRects[i].y1) &&  | ||||
| 	  (dst_y<fxMesa->pClipRects[i].y2)) { | ||||
| 	FX_grLfbWriteRegion(dst_buffer, dst_x, dst_y, src_format, | ||||
| 			    1, 1, src_stride, src_data); | ||||
| 	return GL_TRUE; | ||||
|       } | ||||
|     } | ||||
|   } else if (src_height==1) { /* Writing a span */ | ||||
|     if (src_format==GR_LFB_SRC_FMT_8888) srcElt=4; | ||||
|     else if (src_format==GR_LFB_SRC_FMT_ZA16) srcElt=2; | ||||
|     else { | ||||
|       fprintf(stderr, "Unknown src_format passed to writeRegionClipped\n"); | ||||
|       return GL_FALSE; | ||||
|     } | ||||
|     for (i=0; i<fxMesa->numClipRects; i++) { | ||||
|       if (dst_y>=fxMesa->pClipRects[i].y1 && dst_y<fxMesa->pClipRects[i].y2) { | ||||
| 	if (dst_x<fxMesa->pClipRects[i].x1) { | ||||
| 	  x=fxMesa->pClipRects[i].x1; | ||||
| 	  data=((char*)src_data)+srcElt*(dst_x-x); | ||||
| 	  w=src_width-(x-dst_x); | ||||
| 	} else { | ||||
| 	  x=dst_x; | ||||
| 	  data=src_data; | ||||
| 	  w=src_width; | ||||
| 	} | ||||
| 	if (x+w>fxMesa->pClipRects[i].x2) { | ||||
| 	  w=fxMesa->pClipRects[i].x2-x; | ||||
| 	} | ||||
| 	FX_grLfbWriteRegion(dst_buffer, x, dst_y, src_format, w, 1, | ||||
| 			    src_stride, data); | ||||
|       } | ||||
|     } | ||||
|   } else { /* Punt on the case of arbitrary rectangles */ | ||||
|     return GL_FALSE; | ||||
|   } | ||||
|   return GL_TRUE; | ||||
| } | ||||
|  | ||||
| #else | ||||
|  | ||||
| #define writeRegionClipped(fxm,dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)		\ | ||||
|   FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* KW: Rearranged the args in the call to grLfbWriteRegion(). | ||||
|  */ | ||||
| #define LFB_WRITE_SPAN_MESA(dst_buffer,		\ | ||||
| @@ -50,7 +140,7 @@ | ||||
| 			    src_width,		\ | ||||
| 			    src_stride,		\ | ||||
| 			    src_data)		\ | ||||
|   grLfbWriteRegion(dst_buffer,			\ | ||||
|   writeRegionClipped(fxMesa, dst_buffer,	\ | ||||
| 		   dst_x,			\ | ||||
| 		   dst_y,			\ | ||||
| 		   GR_LFB_SRC_FMT_8888,		\ | ||||
| @@ -60,7 +150,11 @@ | ||||
| 		   src_data)			\ | ||||
|  | ||||
|  | ||||
| #else /* defined(FXMESA_USE_RGBA) */ | ||||
| #else /* !defined(FXMESA_USE_RGBA) */ | ||||
|  | ||||
| #define writeRegionClipped(fxm,dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)		\ | ||||
|   FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) | ||||
|  | ||||
|  | ||||
| #define MESACOLOR_TO_ARGB(c) (				\ | ||||
|              ( ((unsigned int)(c[ACOMP]))<<24 ) |	\ | ||||
| @@ -68,7 +162,7 @@ | ||||
|              ( ((unsigned int)(c[GCOMP]))<<8 )  |	\ | ||||
|              (  (unsigned int)(c[BCOMP])) ) | ||||
|    | ||||
| void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,  | ||||
| inline void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,  | ||||
| 			 FxU32 dst_x,  | ||||
| 			 FxU32 dst_y,  | ||||
| 			 FxU32 src_width, | ||||
| @@ -84,7 +178,7 @@ void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer, | ||||
|    { | ||||
|       argb[i] = MESACOLOR_TO_ARGB(rgba[i]); | ||||
|    } | ||||
|    FX_grLfbWriteRegion(dst_buffer, | ||||
|    writeRegionClipped( /*fxMesa,*/ NULL, dst_buffer, | ||||
| 		       dst_x, | ||||
| 		       dst_y, | ||||
| 		       GR_LFB_SRC_FMT_8888, | ||||
| @@ -93,8 +187,9 @@ void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer, | ||||
| 		       src_stride, | ||||
| 		       (void*)argb); | ||||
| } | ||||
|   | ||||
| #endif /* !defined(FXMESA_USE_RGBA) */ | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /************************************************************************/ | ||||
| /*****                    Span functions                            *****/ | ||||
| @@ -107,12 +202,13 @@ static void fxDDWriteRGBASpan(const GLcontext *ctx, | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1;  | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDWriteRGBASpan(...)\n"); | ||||
|   } | ||||
|  | ||||
|   x+=fxMesa->x_offset; | ||||
|   if (mask) { | ||||
|     int span=0; | ||||
|  | ||||
| @@ -143,13 +239,14 @@ static void fxDDWriteRGBSpan(const GLcontext *ctx, | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|   GLubyte rgba[MAX_WIDTH][4]; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDWriteRGBSpan()\n"); | ||||
|   } | ||||
|  | ||||
|   x+=fxMesa->x_offset; | ||||
|   if (mask) { | ||||
|     int span=0; | ||||
|  | ||||
| @@ -192,13 +289,14 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx, | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|   GLuint data[MAX_WIDTH]; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDWriteMonoRGBASpan(...)\n"); | ||||
|   } | ||||
|  | ||||
|   x+=fxMesa->x_offset; | ||||
|   if (mask) { | ||||
|     int span=0; | ||||
|  | ||||
| @@ -208,7 +306,7 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx, | ||||
|         ++span; | ||||
|       } else { | ||||
|         if (span > 0) { | ||||
|           FX_grLfbWriteRegion( fxMesa->currentFB, x+i-span, bottom-y, | ||||
|           writeRegionClipped(fxMesa,  fxMesa->currentFB, x+i-span, bottom-y, | ||||
|                             GR_LFB_SRC_FMT_8888, span, 1, 0, | ||||
|                             (void *) data ); | ||||
|           span = 0; | ||||
| @@ -217,7 +315,7 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx, | ||||
|     } | ||||
|  | ||||
|     if (span > 0) | ||||
|       FX_grLfbWriteRegion( fxMesa->currentFB, x+n-span, bottom-y, | ||||
|       writeRegionClipped(fxMesa,  fxMesa->currentFB, x+n-span, bottom-y, | ||||
|                         GR_LFB_SRC_FMT_8888, span, 1, 0, | ||||
|                         (void *) data ); | ||||
|   } else { | ||||
| @@ -225,7 +323,7 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx, | ||||
|       data[i]=(GLuint) fxMesa->color; | ||||
|     } | ||||
|  | ||||
|     FX_grLfbWriteRegion( fxMesa->currentFB, x, bottom-y, GR_LFB_SRC_FMT_8888, | ||||
|     writeRegionClipped(fxMesa,  fxMesa->currentFB, x, bottom-y, GR_LFB_SRC_FMT_8888, | ||||
|                       n, 1, 0, (void *) data ); | ||||
|   } | ||||
| } | ||||
| @@ -237,7 +335,7 @@ static void fxDDReadRGBASpan(const GLcontext *ctx, | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLushort data[MAX_WIDTH]; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDReadRGBASpan(...)\n"); | ||||
| @@ -245,20 +343,16 @@ static void fxDDReadRGBASpan(const GLcontext *ctx, | ||||
|  | ||||
|   assert(n < MAX_WIDTH); | ||||
|  | ||||
|   grLfbReadRegion( fxMesa->currentFB, x, bottom-y, n, 1, 0, data); | ||||
|   for (i=0;i<n;i++) { | ||||
| #if FXMESA_USE_ARGB | ||||
|     rgba[i][RCOMP]=(data[i] & 0xF800) >> 8; | ||||
|     rgba[i][GCOMP]=(data[i] & 0x07E0) >> 3; | ||||
|     rgba[i][BCOMP]=(data[i] & 0x001F) << 3; | ||||
| #else | ||||
|     rgba[i][RCOMP]=(data[i] & 0x001f) << 3; | ||||
|     rgba[i][GCOMP]=(data[i] & 0x07e0) >> 3; | ||||
|     rgba[i][BCOMP]=(data[i] & 0xf800) >> 8; | ||||
| #endif | ||||
|     rgba[i][ACOMP]=255; | ||||
|   } | ||||
|   x+=fxMesa->x_offset; | ||||
|   FX_grLfbReadRegion( fxMesa->currentFB, x, bottom-y, n, 1, 0, data); | ||||
|  | ||||
|   for (i=0;i<n;i++) { | ||||
|     GLushort pixel = data[i]; | ||||
|     rgba[i][RCOMP] = FX_PixelToR[pixel]; | ||||
|     rgba[i][GCOMP] = FX_PixelToG[pixel]; | ||||
|     rgba[i][BCOMP] = FX_PixelToB[pixel]; | ||||
|     rgba[i][ACOMP] = 255; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /************************************************************************/ | ||||
| @@ -271,7 +365,7 @@ static void fxDDWriteRGBAPixels(const GLcontext *ctx, | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDWriteRGBAPixels(...)\n"); | ||||
| @@ -279,8 +373,8 @@ static void fxDDWriteRGBAPixels(const GLcontext *ctx, | ||||
|  | ||||
|   for(i=0;i<n;i++) | ||||
|     if(mask[i]) | ||||
|        LFB_WRITE_SPAN_MESA(fxMesa->currentFB,x[i],bottom-y[i], | ||||
|                        /*GR_LFB_SRC_FMT_8888,*/1,/*1,*/0,(void *)rgba[i]); | ||||
|        LFB_WRITE_SPAN_MESA(fxMesa->currentFB, x[i]+fxMesa->x_offset, bottom-y[i], | ||||
|                        1, 1, (void *)rgba[i]); | ||||
| } | ||||
|  | ||||
| static void fxDDWriteMonoRGBAPixels(const GLcontext *ctx, | ||||
| @@ -289,7 +383,7 @@ static void fxDDWriteMonoRGBAPixels(const GLcontext *ctx, | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDWriteMonoRGBAPixels(...)\n"); | ||||
| @@ -297,7 +391,7 @@ static void fxDDWriteMonoRGBAPixels(const GLcontext *ctx, | ||||
|  | ||||
|   for(i=0;i<n;i++) | ||||
|     if(mask[i]) | ||||
|       FX_grLfbWriteRegion(fxMesa->currentFB,x[i],bottom-y[i], | ||||
|       writeRegionClipped(fxMesa, fxMesa->currentFB,x[i]+fxMesa->x_offset,bottom-y[i], | ||||
|                        GR_LFB_SRC_FMT_8888,1,1,0,(void *) &fxMesa->color); | ||||
| } | ||||
|  | ||||
| @@ -307,31 +401,25 @@ static void fxDDReadRGBAPixels(const GLcontext *ctx, | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLushort data; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDReadRGBAPixels(...)\n"); | ||||
|   } | ||||
|  | ||||
|   for(i=0;i<n;i++) | ||||
|   for(i=0;i<n;i++) { | ||||
|     if(mask[i]) { | ||||
|       grLfbReadRegion(fxMesa->currentFB,x[i],bottom-y[i],1,1,0,&data); | ||||
|    #if FXMESA_USE_ARGB  | ||||
|       rgba[i][RCOMP]=(data & 0xF800) >> 8; | ||||
|       rgba[i][GCOMP]=(data & 0x07E0) >> 3; | ||||
|       rgba[i][BCOMP]=(data & 0x001F) >> 8; | ||||
|    #else | ||||
|       rgba[i][RCOMP]=(data & 0x001f) << 3; | ||||
|       rgba[i][GCOMP]=(data & 0x07e0) >> 3; | ||||
|       rgba[i][BCOMP]=(data & 0xf800) >> 8; | ||||
|    #endif | ||||
|       /* the alpha value should be read from the auxiliary buffer when required */ | ||||
|  | ||||
|       rgba[i][ACOMP]=255; | ||||
|       GLushort pixel; | ||||
|       FX_grLfbReadRegion(fxMesa->currentFB,x[i],bottom-y[i],1,1,0,&pixel); | ||||
|       rgba[i][RCOMP] = FX_PixelToR[pixel]; | ||||
|       rgba[i][GCOMP] = FX_PixelToG[pixel]; | ||||
|       rgba[i][BCOMP] = FX_PixelToB[pixel]; | ||||
|       rgba[i][ACOMP] = 255; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| /************************************************************************/ | ||||
| /*****                    Depth functions                           *****/ | ||||
| /************************************************************************/ | ||||
| @@ -340,15 +428,42 @@ void fxDDReadDepthSpanFloat(GLcontext *ctx, | ||||
| 			    GLuint n, GLint x, GLint y, GLfloat depth[]) | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint i; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|   GLushort data[MAX_WIDTH]; | ||||
|   GLint count = (GLint) n; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDReadDepthSpanFloat(...)\n"); | ||||
|   } | ||||
|  | ||||
|   grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,data); | ||||
|   if (y < 0 || y >= ctx->Buffer->Height || | ||||
|       x >= ctx->Buffer->Width || x + count < 0) { | ||||
|     /* completely outside frame buffer */ | ||||
|     for (i = 0; i < count; i++) | ||||
|       depth[i] = 0; | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   if (x < 0) { | ||||
|     GLint dx = -x; | ||||
|     for (i = 0; i < dx; i++) | ||||
|       depth[i] = 0; | ||||
|     x = 0; | ||||
|     depth += dx; | ||||
|     count -= dx; | ||||
|   } | ||||
|   if (x + count > ctx->Buffer->Width) { | ||||
|     GLint dx = x + count - ctx->Buffer->Width; | ||||
|     for (i = 0; i < dx; i++) | ||||
|       depth[count - dx - 1] = 0; | ||||
|     count -= dx; | ||||
|   } | ||||
|   if (count <= 0) | ||||
|     return; | ||||
|  | ||||
|   x+=fxMesa->x_offset; | ||||
|   FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,data); | ||||
|  | ||||
|   /* | ||||
|     convert the read values to float values [0.0 .. 1.0]. | ||||
| @@ -361,13 +476,41 @@ void fxDDReadDepthSpanInt(GLcontext *ctx, | ||||
| 			  GLuint n, GLint x, GLint y, GLdepth depth[]) | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|   GLint count = (GLint) n; | ||||
|   GLint i; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDReadDepthSpanInt(...)\n"); | ||||
|   } | ||||
|  | ||||
|   grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depth); | ||||
|   if (y < 0 || y >= ctx->Buffer->Height || | ||||
|       x >= ctx->Buffer->Width || x + count < 0) { | ||||
|     /* completely outside frame buffer */ | ||||
|     for (i = 0; i < count; i++) | ||||
|       depth[i] = 0; | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   if (x < 0) { | ||||
|     GLint dx = -x; | ||||
|     for (i = 0; i < dx; i++) | ||||
|       depth[i] = 0; | ||||
|     x = 0; | ||||
|     depth += dx; | ||||
|     count -= dx; | ||||
|   } | ||||
|   if (x + count > ctx->Buffer->Width) { | ||||
|     GLint dx = x + count - ctx->Buffer->Width; | ||||
|     for (i = 0; i < dx; i++) | ||||
|       depth[count - dx - 1] = 0; | ||||
|     count -= dx; | ||||
|   } | ||||
|   if (count <= 0) | ||||
|     return; | ||||
|  | ||||
|   x+=fxMesa->x_offset; | ||||
|   FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depth); | ||||
| } | ||||
|  | ||||
| GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx, | ||||
| @@ -380,13 +523,14 @@ GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx, | ||||
|   GLubyte *m=mask; | ||||
|   GLuint i; | ||||
|   GLuint passed=0; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDDepthTestSpanGeneric(...)\n"); | ||||
|   } | ||||
|  | ||||
|   grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depthdata); | ||||
|   x+=fxMesa->x_offset; | ||||
|   FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depthdata); | ||||
|  | ||||
|   /* switch cases ordered from most frequent to less frequent */ | ||||
|   switch (ctx->Depth.Func) { | ||||
| @@ -578,7 +722,7 @@ GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx, | ||||
|   } /*switch*/ | ||||
|  | ||||
|   if(passed) | ||||
|     FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,GR_LFB_SRC_FMT_ZA16,n,1,0,depthdata); | ||||
|     writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x,bottom-y,GR_LFB_SRC_FMT_ZA16,n,1,0,depthdata); | ||||
|  | ||||
|   return passed; | ||||
| } | ||||
| @@ -590,7 +734,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   GLdepth zval; | ||||
|   GLuint i; | ||||
|   GLint bottom=fxMesa->height-1; | ||||
|   GLint bottom=fxMesa->height+fxMesa->y_offset-1; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDDepthTestPixelsGeneric(...)\n"); | ||||
| @@ -603,10 +747,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] < zval) { | ||||
|             /* pass */ | ||||
|             FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|             writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           } else { | ||||
|             /* fail */ | ||||
|             mask[i] = 0; | ||||
| @@ -617,7 +761,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Don't update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] < zval) { | ||||
|             /* pass */ | ||||
|           } | ||||
| @@ -634,10 +778,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] <= zval) { | ||||
|             /* pass */ | ||||
|             FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|             writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           } else { | ||||
|             /* fail */ | ||||
|             mask[i] = 0; | ||||
| @@ -648,7 +792,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Don't update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] <= zval) { | ||||
|             /* pass */ | ||||
|           } else { | ||||
| @@ -664,10 +808,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] >= zval) { | ||||
|             /* pass */ | ||||
|             FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|             writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           } else { | ||||
|             /* fail */ | ||||
|             mask[i] = 0; | ||||
| @@ -678,7 +822,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Don't update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] >= zval) { | ||||
|             /* pass */ | ||||
|           } else { | ||||
| @@ -694,10 +838,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] > zval) { | ||||
|             /* pass */ | ||||
|             FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|             writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           } else { | ||||
|             /* fail */ | ||||
|             mask[i] = 0; | ||||
| @@ -708,7 +852,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Don't update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] > zval) { | ||||
|             /* pass */ | ||||
|           } else { | ||||
| @@ -724,10 +868,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] != zval) { | ||||
|             /* pass */ | ||||
|             FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|             writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           } else { | ||||
|             /* fail */ | ||||
|             mask[i] = 0; | ||||
| @@ -738,7 +882,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Don't update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] != zval) { | ||||
|             /* pass */ | ||||
|           } | ||||
| @@ -755,10 +899,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] == zval) { | ||||
|             /* pass */ | ||||
|             FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|             writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           } else { | ||||
|             /* fail */ | ||||
|             mask[i] = 0; | ||||
| @@ -769,7 +913,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Don't update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval); | ||||
|           FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval); | ||||
|           if (z[i] == zval) { | ||||
|             /* pass */ | ||||
|           } else { | ||||
| @@ -785,7 +929,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx, | ||||
|       /* Update Z buffer */ | ||||
|       for (i=0; i<n; i++) { | ||||
|         if (mask[i]) { | ||||
|           FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|           writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]); | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|   | ||||
| @@ -1,27 +1,48 @@ | ||||
| /* -*- mode: C; tab-width:8;  -*- | ||||
|  | ||||
|              fxddtex.c - 3Dfx VooDoo Texture mapping functions | ||||
| */ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * See the file fxapi.c for more informations about authors | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
| @@ -30,6 +51,37 @@ | ||||
|  | ||||
| #include "fxdrv.h" | ||||
|  | ||||
| void fxPrintTextureData(tfxTexInfo *ti) | ||||
| { | ||||
|   fprintf(stderr, "Texture Data:\n"); | ||||
|   if (ti->tObj) { | ||||
|     fprintf(stderr, "\tName: %d\n", ti->tObj->Name); | ||||
|     fprintf(stderr, "\tBaseLevel: %d\n", ti->tObj->BaseLevel); | ||||
|     fprintf(stderr, "\tSize: %d x %d\n",  | ||||
| 	    ti->tObj->Image[ti->tObj->BaseLevel]->Width, | ||||
| 	    ti->tObj->Image[ti->tObj->BaseLevel]->Height); | ||||
|   } else | ||||
|     fprintf(stderr, "\tName: UNNAMED\n"); | ||||
|   fprintf(stderr, "\tLast used: %d\n", ti->lastTimeUsed); | ||||
|   fprintf(stderr, "\tTMU: %d\n", ti->whichTMU); | ||||
|   fprintf(stderr, "\t%s\n", (ti->isInTM)?"In TMU":"Not in TMU"); | ||||
|   if (ti->tm[0])  | ||||
|     fprintf(stderr, "\tMem0: %x-%x\n", ti->tm[0]->startAddr,  | ||||
| 	    ti->tm[0]->endAddr); | ||||
|   if (ti->tm[1])  | ||||
|     fprintf(stderr, "\tMem1: %x-%x\n", ti->tm[1]->startAddr,  | ||||
| 	    ti->tm[1]->endAddr); | ||||
|   fprintf(stderr, "\tMipmaps: %d-%d\n", ti->minLevel, ti->maxLevel); | ||||
|   fprintf(stderr, "\tFilters: min %d min %d\n", ti->minFilt, ti->maxFilt); | ||||
|   fprintf(stderr, "\tClamps: s %d t %d\n", ti->sClamp, ti->tClamp); | ||||
|   fprintf(stderr, "\tScales: s %f t %f\n", ti->sScale, ti->tScale); | ||||
|   fprintf(stderr, "\tInt Scales: s %d t %d\n",  | ||||
| 	  ti->int_sScale/0x800000, ti->int_tScale/0x800000); | ||||
|   fprintf(stderr, "\t%s\n", (ti->fixedPalette)?"Fixed palette":"Non fixed palette"); | ||||
|   fprintf(stderr, "\t%s\n", (ti->validated)?"Validated":"Not validated"); | ||||
| } | ||||
|  | ||||
|  | ||||
| /************************************************************************/ | ||||
| /*************************** Texture Mapping ****************************/ | ||||
| /************************************************************************/ | ||||
| @@ -41,7 +93,7 @@ void fxTexInvalidate(GLcontext *ctx, struct gl_texture_object *tObj) | ||||
|  | ||||
|   fxTMMoveOutTM(fxMesa,tObj); /* TO DO: SLOW but easy to write */ | ||||
|  | ||||
|   ti=(tfxTexInfo *)tObj->DriverData; | ||||
|   ti=fxTMGetTexInfo(tObj); | ||||
|   ti->validated=GL_FALSE; | ||||
|   fxMesa->new_state|=FX_NEW_TEXTURING; | ||||
|   ctx->Driver.RenderStart = fxSetupFXUnits; | ||||
| @@ -59,12 +111,12 @@ static tfxTexInfo *fxAllocTexObjData(fxMesaContext fxMesa) | ||||
|   } | ||||
|  | ||||
|   ti->validated=GL_FALSE; | ||||
|   ti->tmi.isInTM=GL_FALSE; | ||||
|   ti->isInTM=GL_FALSE; | ||||
|  | ||||
|   ti->tmi.whichTMU=FX_TMU_NONE; | ||||
|   ti->whichTMU=FX_TMU_NONE; | ||||
|  | ||||
|   ti->tmi.tm[FX_TMU0]=NULL; | ||||
|   ti->tmi.tm[FX_TMU1]=NULL; | ||||
|   ti->tm[FX_TMU0]=NULL; | ||||
|   ti->tm[FX_TMU1]=NULL; | ||||
|  | ||||
|   ti->minFilt=GR_TEXTUREFILTER_POINT_SAMPLED; | ||||
|   ti->maxFilt=GR_TEXTUREFILTER_BILINEAR; | ||||
| @@ -72,17 +124,12 @@ static tfxTexInfo *fxAllocTexObjData(fxMesaContext fxMesa) | ||||
|   ti->sClamp=GR_TEXTURECLAMP_WRAP; | ||||
|   ti->tClamp=GR_TEXTURECLAMP_WRAP; | ||||
|  | ||||
|   if(fxMesa->haveTwoTMUs) { | ||||
|     ti->mmMode=GR_MIPMAP_NEAREST; | ||||
|     ti->LODblend=FXTRUE; | ||||
|   } else { | ||||
|     ti->mmMode=GR_MIPMAP_NEAREST_DITHER; | ||||
|     ti->LODblend=FXFALSE; | ||||
|   } | ||||
|   ti->mmMode=GR_MIPMAP_NEAREST; | ||||
|   ti->LODblend=FXFALSE; | ||||
|  | ||||
|   for(i=0;i<MAX_TEXTURE_LEVELS;i++) { | ||||
|     ti->tmi.mipmapLevel[i].used=GL_FALSE; | ||||
|     ti->tmi.mipmapLevel[i].data=NULL; | ||||
|     ti->mipmapLevel[i].used=GL_FALSE; | ||||
|     ti->mipmapLevel[i].data=NULL; | ||||
|   } | ||||
|  | ||||
|   return ti; | ||||
| @@ -100,13 +147,14 @@ void fxDDTexBind(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj) | ||||
|   if(target!=GL_TEXTURE_2D) | ||||
|     return; | ||||
|  | ||||
|   if(!tObj->DriverData) | ||||
|   if (!tObj->DriverData) { | ||||
|     tObj->DriverData=fxAllocTexObjData(fxMesa); | ||||
|   } | ||||
|  | ||||
|   ti=(tfxTexInfo *)tObj->DriverData; | ||||
|   ti=fxTMGetTexInfo(tObj); | ||||
|  | ||||
|   fxMesa->texBindNumber++; | ||||
|   ti->tmi.lastTimeUsed=fxMesa->texBindNumber; | ||||
|   ti->lastTimeUsed=fxMesa->texBindNumber; | ||||
|  | ||||
|   fxMesa->new_state|=FX_NEW_TEXTURING; | ||||
|   ctx->Driver.RenderStart = fxSetupFXUnits; | ||||
| @@ -141,10 +189,10 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, | ||||
|   if(target!=GL_TEXTURE_2D) | ||||
|     return; | ||||
|  | ||||
|   if(!tObj->DriverData) | ||||
|   if (!tObj->DriverData) | ||||
|     tObj->DriverData=fxAllocTexObjData(fxMesa); | ||||
|  | ||||
|   ti=(tfxTexInfo *)tObj->DriverData; | ||||
|   ti=fxTMGetTexInfo(tObj); | ||||
|  | ||||
|   switch(pname) { | ||||
|  | ||||
| @@ -219,7 +267,6 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, | ||||
|       ti->sClamp=GR_TEXTURECLAMP_WRAP; | ||||
|       break; | ||||
|     default: | ||||
|        fprintf(stderr, "BAD CLAMP\n"); | ||||
|       break; | ||||
|     } | ||||
|     fxMesa->new_state|=FX_NEW_TEXTURING; | ||||
| @@ -266,7 +313,7 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, | ||||
| void fxDDTexDel(GLcontext *ctx, struct gl_texture_object *tObj) | ||||
| { | ||||
|   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; | ||||
|   tfxTexInfo *ti=(tfxTexInfo *)tObj->DriverData; | ||||
|   tfxTexInfo *ti=fxTMGetTexInfo(tObj); | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: fxDDTexDel(%d,%x)\n",tObj->Name,(GLuint)ti); | ||||
| @@ -309,10 +356,10 @@ void fxDDTexPalette(GLcontext *ctx, struct gl_texture_object *tObj) | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     if(!tObj->DriverData) | ||||
|     if (!tObj->DriverData) | ||||
|       tObj->DriverData=fxAllocTexObjData(fxMesa); | ||||
|    | ||||
|     ti=(tfxTexInfo *)tObj->DriverData; | ||||
|     ti=fxTMGetTexInfo(tObj); | ||||
|  | ||||
|     for(i=0;i<tObj->PaletteSize;i++) { | ||||
|       r=tObj->Palette[i*4]; | ||||
| @@ -374,13 +421,10 @@ void fxDDTexUseGlbPalette(GLcontext *ctx, GLboolean state) | ||||
|     if((ctx->Texture.Unit[0].Current==ctx->Texture.Unit[0].CurrentD[2]) && | ||||
|        (ctx->Texture.Unit[0].Current!=NULL)) { | ||||
|       struct gl_texture_object *tObj=ctx->Texture.Unit[0].Current; | ||||
|       tfxTexInfo *ti; | ||||
|  | ||||
|       if(!tObj->DriverData) | ||||
|       if (!tObj->DriverData) | ||||
|         tObj->DriverData=fxAllocTexObjData(fxMesa); | ||||
|    | ||||
|       ti=(tfxTexInfo *)tObj->DriverData; | ||||
|  | ||||
|       fxTexInvalidate(ctx,tObj); | ||||
|     } | ||||
|   } | ||||
| @@ -872,10 +916,10 @@ static void fxTexBuildImageMap(const struct gl_texture_image *image, | ||||
|  | ||||
|     if(wscale==hscale==1) { | ||||
|       int i=0; | ||||
|       int lenght=h*w; | ||||
|       int length=h*w; | ||||
|       unsigned short a,l; | ||||
|  | ||||
|       while(i++<lenght) { | ||||
|       while(i++<length) { | ||||
|         l=*data++; | ||||
|         a=*data++; | ||||
|  | ||||
| @@ -916,10 +960,10 @@ static void fxTexBuildImageMap(const struct gl_texture_image *image, | ||||
|  | ||||
|     if(wscale==hscale==1) { | ||||
|       int i=0; | ||||
|       int lenght=h*w; | ||||
|       int length=h*w; | ||||
|       unsigned short r,g,b; | ||||
|  | ||||
|       while(i++<lenght) { | ||||
|       while(i++<length) { | ||||
|         r=*data++; | ||||
|         g=*data++; | ||||
|         b=*data++; | ||||
| @@ -966,10 +1010,10 @@ static void fxTexBuildImageMap(const struct gl_texture_image *image, | ||||
|  | ||||
|     if(wscale==hscale==1) { | ||||
|       int i=0; | ||||
|       int lenght=h*w; | ||||
|       int length=h*w; | ||||
|       unsigned short r,g,b,a; | ||||
|  | ||||
|       while(i++<lenght) { | ||||
|       while(i++<length) { | ||||
|         r=*data++; | ||||
|         g=*data++; | ||||
|         b=*data++; | ||||
| @@ -1014,21 +1058,23 @@ void fxDDTexImg(GLcontext *ctx, GLenum target, | ||||
|   tfxTexInfo *ti; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: (%d) fxDDTexImg(...,%d,%x,%d,%d...)\n",tObj->Name, | ||||
| 	     target,internalFormat,image->Width,image->Height); | ||||
|      fprintf(stderr, | ||||
| 	     "fxmesa: (%d) fxDDTexImg(...,level=%d,target=%d,format=%x,width=%d,height=%d...)\n", | ||||
| 	     tObj->Name, level, target, internalFormat, image->Width, | ||||
| 	     image->Height); | ||||
|   } | ||||
|  | ||||
|   if(target!=GL_TEXTURE_2D) | ||||
|     return; | ||||
|  | ||||
|   if(!tObj->DriverData) | ||||
|   if (!tObj->DriverData) | ||||
|     tObj->DriverData=fxAllocTexObjData(fxMesa); | ||||
|  | ||||
|   ti=(tfxTexInfo *)tObj->DriverData; | ||||
|   ti=fxTMGetTexInfo(tObj); | ||||
|  | ||||
|   if(fxIsTexSupported(target,internalFormat,image)) { | ||||
|     GrTextureFormat_t gldformat; | ||||
|     tfxMipMapLevel *mml=&ti->tmi.mipmapLevel[level]; | ||||
|     tfxMipMapLevel *mml=&ti->mipmapLevel[level]; | ||||
|  | ||||
|     fxTexGetFormat(internalFormat,&gldformat,NULL); | ||||
|      | ||||
| @@ -1039,7 +1085,7 @@ void fxDDTexImg(GLcontext *ctx, GLenum target, | ||||
|         fxTexBuildImageMap(image,internalFormat,&(mml->data), | ||||
|                            &(mml->translated)); | ||||
|  | ||||
|         if(ti->validated && ti->tmi.isInTM) | ||||
|         if(ti->validated && ti->isInTM) | ||||
|           fxTMReloadMipMapLevel(fxMesa,tObj,level); | ||||
|         else | ||||
|           fxTexInvalidate(ctx,tObj); | ||||
| @@ -1239,18 +1285,20 @@ void fxDDTexSubImg(GLcontext *ctx, GLenum target, | ||||
|   tfxMipMapLevel *mml; | ||||
|  | ||||
|   if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|      fprintf(stderr,"fxmesa: (%d) fxDDTexSubImg(...,%d,%x,%d,%d...)\n",tObj->Name, | ||||
| 	     target,internalFormat,image->Width,image->Height); | ||||
|      fprintf(stderr, | ||||
| 	     "fxmesa: (%d) fxDDTexSubImg(level=%d,target=%d,format=%x,width=%d,height=%d)\n", | ||||
| 	     tObj->Name, level, target, internalFormat, image->Width, | ||||
| 	     image->Height); | ||||
|   } | ||||
|  | ||||
|   if(target!=GL_TEXTURE_2D) | ||||
|     return; | ||||
|  | ||||
|   if(!tObj->DriverData) | ||||
|   if (!tObj->DriverData) | ||||
|     return; | ||||
|  | ||||
|   ti=(tfxTexInfo *)tObj->DriverData; | ||||
|   mml=&ti->tmi.mipmapLevel[level]; | ||||
|   ti=fxTMGetTexInfo(tObj); | ||||
|   mml=&ti->mipmapLevel[level]; | ||||
|  | ||||
|   fxTexGetFormat(internalFormat,&gldformat,NULL); | ||||
|  | ||||
| @@ -1278,8 +1326,8 @@ void fxDDTexSubImg(GLcontext *ctx, GLenum target, | ||||
|     fxTexBuildSubImageMap(image,internalFormat,xoffset,yoffset, | ||||
|                           width,height,mml->data); | ||||
|  | ||||
|   if(ti->validated && ti->tmi.isInTM) | ||||
|     fxTMReloadSubMipMapLevel(fxMesa,tObj,level,yoffset,height); | ||||
|   if(ti->validated && ti->isInTM) | ||||
|     fxTMReloadMipMapLevel(fxMesa,tObj,level); | ||||
|   else | ||||
|     fxTexInvalidate(ctx,tObj); | ||||
| } | ||||
|   | ||||
| @@ -1,27 +1,48 @@ | ||||
| /* -*- mode: C; tab-width:8;  -*- | ||||
|  | ||||
|              fxdrv.h - 3Dfx VooDoo driver types | ||||
| */ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * See the file fxapi.c for more informations about authors | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef FXDRV_H | ||||
| #define FXDRV_H | ||||
|  | ||||
| @@ -54,14 +75,18 @@ | ||||
| #include "clip.h" | ||||
| #include "vbrender.h" | ||||
|  | ||||
| #ifdef XF86DRI | ||||
| typedef struct tfxMesaContext *fxMesaContext; | ||||
| #else | ||||
| #include "GL/fxmesa.h" | ||||
| #endif | ||||
| #include "fxglidew.h" | ||||
| /* use gl/gl.h GLAPI/GLAPIENTRY/GLCALLBACK in place of WINGDIAPI/APIENTRY/CALLBACK, */ | ||||
| /* these are defined in mesa gl/gl.h - tjump@spgs.com */ | ||||
|  | ||||
|  | ||||
|  | ||||
| #if 0 | ||||
| #if defined(MESA_DEBUG) && 0 | ||||
| extern void fx_sanity_triangle( GrVertex *, GrVertex *, GrVertex * ); | ||||
| #define grDrawTriangle fx_sanity_triangle | ||||
| #endif | ||||
| @@ -140,17 +165,17 @@ typedef struct { | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #define FX_VB_COLOR(fxm, color)			\ | ||||
| do {						\ | ||||
|   if (sizeof(GLint) == 4*sizeof(GLubyte)) {	\ | ||||
|      if (fxm->constColor != *(GLuint*)color) {	\ | ||||
| 	fxm->constColor = *(GLuint*)color;	\ | ||||
| 	grConstantColorValue(FXCOLOR4(color));	\ | ||||
|      }						\ | ||||
|   } else {					\ | ||||
|      grConstantColorValue(FXCOLOR4(color));	\ | ||||
|   }						\ | ||||
| } while (0) | ||||
| #define FX_VB_COLOR(fxm, color)				\ | ||||
|   do {							\ | ||||
|     if (sizeof(GLint) == 4*sizeof(GLubyte)) {		\ | ||||
|       if (fxm->constColor != *(GLuint*)color) {		\ | ||||
| 	fxm->constColor = *(GLuint*)color;		\ | ||||
| 	FX_grConstantColorValue(FXCOLOR4(color));	\ | ||||
|       }							\ | ||||
|     } else {						\ | ||||
|       FX_grConstantColorValue(FXCOLOR4(color));		\ | ||||
|     }							\ | ||||
|   } while (0) | ||||
|  | ||||
| #define GOURAUD(x) {					\ | ||||
|   GLubyte *col = VB->ColorPtr->data[(x)];		\ | ||||
| @@ -230,23 +255,20 @@ do {						\ | ||||
|  | ||||
| #define FX_UM_E_IFMT                0x00fff000 | ||||
|  | ||||
| #define FX_UM_COLOR_ITERATED        0x00100000 | ||||
| #define FX_UM_COLOR_CONSTANT        0x00200000 | ||||
| #define FX_UM_ALPHA_ITERATED        0x00400000 | ||||
| #define FX_UM_ALPHA_CONSTANT        0x00800000 | ||||
| #define FX_UM_COLOR_ITERATED        0x01000000 | ||||
| #define FX_UM_COLOR_CONSTANT        0x02000000 | ||||
| #define FX_UM_ALPHA_ITERATED        0x04000000 | ||||
| #define FX_UM_ALPHA_CONSTANT        0x08000000 | ||||
|  | ||||
| typedef void (*tfxRenderVBFunc)(GLcontext *); | ||||
|  | ||||
| typedef struct tfxTMFreeListNode { | ||||
|   struct tfxTMFreeListNode *next; | ||||
|   FxU32 startAddress, endAddress; | ||||
| } tfxTMFreeNode; | ||||
|  | ||||
| typedef struct tfxTMAllocListNode { | ||||
|   struct tfxTMAllocListNode *next; | ||||
|   FxU32 startAddress, endAddress; | ||||
|   struct gl_texture_object *tObj; | ||||
| } tfxTMAllocNode; | ||||
| /* | ||||
|   Memory range from startAddr to endAddr-1 | ||||
| */ | ||||
| typedef struct MemRange_t { | ||||
|   struct MemRange_t *next; | ||||
|   FxU32 startAddr, endAddr; | ||||
| } MemRange; | ||||
|  | ||||
| typedef struct { | ||||
|   GLsizei width, height; | ||||
| @@ -256,19 +278,17 @@ typedef struct { | ||||
|   GLboolean translated, used; | ||||
| } tfxMipMapLevel; | ||||
|  | ||||
| typedef struct { | ||||
| typedef struct tfxTexInfo_t { | ||||
|   struct tfxTexInfo *next; | ||||
|   struct gl_texture_object *tObj; | ||||
|  | ||||
|   GLuint lastTimeUsed; | ||||
|  | ||||
|   FxU32 whichTMU; | ||||
|  | ||||
|   tfxTMAllocNode *tm[FX_NUM_TMU]; | ||||
|   GLboolean isInTM; | ||||
|  | ||||
|   tfxMipMapLevel mipmapLevel[MAX_TEXTURE_LEVELS]; | ||||
|   GLboolean isInTM; | ||||
| } tfxTMInfo; | ||||
|  | ||||
| typedef struct { | ||||
|   tfxTMInfo tmi; | ||||
|   MemRange *tm[FX_NUM_TMU]; | ||||
|  | ||||
|   GLint minLevel, maxLevel; | ||||
|   GLint baseLevelInternalFormat; | ||||
| @@ -384,14 +404,27 @@ struct tfxMesaVertexBuffer { | ||||
|  | ||||
| #define FX_DRIVER_DATA(vb) ((struct tfxMesaVertexBuffer *)((vb)->driver_data)) | ||||
| #define FX_CONTEXT(ctx) ((fxMesaContext)((ctx)->DriverCtx)) | ||||
| #define FX_TEXTURE_DATA(t) ((tfxTexInfo *) ((t)->Current->DriverData)) | ||||
| #define FX_TEXTURE_DATA(t) fxTMGetTexInfo((t)->Current) | ||||
|  | ||||
| #if defined(XFree86Server) || defined(GLX_DIRECT_RENDERING) | ||||
| #include "tdfx_init.h" | ||||
| #else | ||||
| #define DRI_FX_CONTEXT | ||||
| #define BEGIN_BOARD_LOCK() | ||||
| #define END_BOARD_LOCK() | ||||
| #define BEGIN_CLIP_LOOP() | ||||
| #define END_CLIP_LOOP() | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* These lookup table are used to extract RGB values in [0,255] from | ||||
|  * 16-bit pixel values. | ||||
|  */ | ||||
| extern GLubyte FX_PixelToR[0x10000]; | ||||
| extern GLubyte FX_PixelToG[0x10000]; | ||||
| extern GLubyte FX_PixelToB[0x10000]; | ||||
|  | ||||
|  | ||||
| struct tfxMesaContext { | ||||
|   GuTexPalette glbPalette; | ||||
|  | ||||
| @@ -404,6 +437,7 @@ struct tfxMesaContext { | ||||
|  | ||||
|   GrBuffer_t currentFB; | ||||
|  | ||||
|   GLboolean bgrOrder; | ||||
|   GrColor_t color; | ||||
|   GrColor_t clearC; | ||||
|   GrAlpha_t clearA; | ||||
| @@ -412,7 +446,6 @@ struct tfxMesaContext { | ||||
|   tfxUnitsState unitsState; | ||||
|   tfxUnitsState restoreUnitsState; /* saved during multipass */ | ||||
|  | ||||
|  | ||||
|   GLuint tmu_source[FX_NUM_TMU]; | ||||
|   GLuint tex_dest[MAX_TEXTURE_UNITS]; | ||||
|   GLuint setupindex; | ||||
| @@ -438,11 +471,12 @@ struct tfxMesaContext { | ||||
|   GLint tmuSrc; | ||||
|   GLuint lastUnitsMode; | ||||
|   GLuint freeTexMem[FX_NUM_TMU]; | ||||
|   tfxTMFreeNode *tmFree[FX_NUM_TMU]; | ||||
|   tfxTMAllocNode *tmAlloc[FX_NUM_TMU]; | ||||
|   MemRange *tmPool; | ||||
|   MemRange *tmFree[FX_NUM_TMU]; | ||||
|  | ||||
|   GLenum fogTableMode; | ||||
|   GLfloat fogDensity; | ||||
|   GLfloat fogStart, fogEnd; | ||||
|   GrFog_t *fogTable; | ||||
|  | ||||
|   /* Acc. functions */ | ||||
| @@ -477,10 +511,19 @@ struct tfxMesaContext { | ||||
|    | ||||
|   FX_GrContext_t glideContext; | ||||
|  | ||||
|   GLfloat wscale; | ||||
|   int x_offset; | ||||
|   int y_offset; | ||||
|   int y_delta; | ||||
|   int screen_width; | ||||
|   int screen_height; | ||||
|   int initDone; | ||||
|   int clipMinX; | ||||
|   int clipMaxX; | ||||
|   int clipMinY; | ||||
|   int clipMaxY; | ||||
|   int needClip; | ||||
|  | ||||
|   DRI_FX_CONTEXT | ||||
|  | ||||
| }; | ||||
|  | ||||
| typedef void (*tfxSetupFunc)(struct vertex_buffer *, GLuint, GLuint); | ||||
| @@ -522,6 +565,7 @@ extern void fxSetupDDSpanPointers(GLcontext *); | ||||
|  | ||||
| extern void fxDDBufferSize(GLcontext *, GLuint *, GLuint *); | ||||
|  | ||||
| extern void fxPrintTextureData(tfxTexInfo *ti); | ||||
| extern void fxDDTexEnv(GLcontext *, GLenum, const GLfloat *); | ||||
| extern void fxDDTexImg(GLcontext *, GLenum, struct gl_texture_object *, | ||||
| 		       GLint, GLint, const struct gl_texture_image *); | ||||
| @@ -571,10 +615,12 @@ extern void fxDDRenderVBIndirectDirect( struct vertex_buffer *VB ); | ||||
|  | ||||
| extern void fxDDInitExtensions( GLcontext *ctx ); | ||||
|  | ||||
| #define fxTMGetTexInfo(o) ((tfxTexInfo*)((o)->DriverData)) | ||||
| extern void fxTMInit(fxMesaContext ctx); | ||||
| extern void fxTMClose(fxMesaContext ctx); | ||||
| extern void fxTMMoveInTM(fxMesaContext, struct gl_texture_object *, GLint); | ||||
| extern void fxTMMoveOutTM(fxMesaContext, struct gl_texture_object *); | ||||
| #define fxTMMoveOutTM_NoLock fxTMMoveOutTM | ||||
| extern void fxTMFreeTexture(fxMesaContext, struct gl_texture_object *); | ||||
| extern void fxTMReloadMipMapLevel(fxMesaContext, struct gl_texture_object *, GLint); | ||||
| extern void fxTMReloadSubMipMapLevel(fxMesaContext, struct gl_texture_object *, | ||||
| @@ -622,4 +668,11 @@ extern void fxDDDoRenderVB( struct vertex_buffer *VB ); | ||||
|  | ||||
| extern int fxDDInitFxMesaContext( fxMesaContext fxMesa ); | ||||
|  | ||||
|  | ||||
| extern void fxSetScissorValues(GLcontext *ctx); | ||||
| extern void fxTMMoveInTM_NoLock(fxMesaContext fxMesa,  | ||||
| 				struct gl_texture_object *tObj,  | ||||
| 				GLint where); | ||||
| extern void fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -1,28 +1,47 @@ | ||||
| /* $Id: fxglidew.c,v 1.3 1999/10/05 19:26:54 miklos Exp $ */ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  *  | ||||
|  * | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  *  | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  *  | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|   | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| @@ -36,8 +55,7 @@ | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
|  | ||||
| FxI32 FX_grGetInteger(FxU32 pname) | ||||
| static FxI32 FX_grGetInteger_NoLock(FxU32 pname) | ||||
| { | ||||
| #if !defined(FX_GLIDE3) | ||||
|   switch (pname)  | ||||
| @@ -49,7 +67,7 @@ FxI32 FX_grGetInteger(FxU32 pname) | ||||
|     case FX_LFB_PIXEL_PIPE: | ||||
|        return FXFALSE; | ||||
|     case FX_PENDING_BUFFERSWAPS: | ||||
|        return grBufferNumPending(); | ||||
| 	return grBufferNumPending(); | ||||
|     default: | ||||
|        if (MESA_VERBOSE&VERBOSE_DRIVER) { | ||||
|           fprintf(stderr,"Wrong parameter in FX_grGetInteger!\n"); | ||||
| @@ -74,12 +92,84 @@ FxI32 FX_grGetInteger(FxU32 pname) | ||||
|        } | ||||
|        return -1; | ||||
|   } | ||||
|    | ||||
|  | ||||
|   grGet(grname,4,&result); | ||||
|   return result; | ||||
| #endif | ||||
| } | ||||
|  | ||||
| FxI32 FX_grGetInteger(FxU32 pname) | ||||
| { | ||||
|   int result; | ||||
|  | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   result=FX_grGetInteger_NoLock(pname); | ||||
|   END_BOARD_LOCK(); | ||||
|   return result; | ||||
| } | ||||
|  | ||||
|  | ||||
| FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,  | ||||
| 		    GrLfbWriteMode_t writeMode, GrOriginLocation_t origin,  | ||||
| 		    FxBool pixelPipeline, GrLfbInfo_t *info ) { | ||||
|   FxBool result; | ||||
|  | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   result=grLfbLock(type, buffer, writeMode, origin, pixelPipeline, info); | ||||
|   END_BOARD_LOCK(); | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo *info) { | ||||
|   FxU32 result; | ||||
|  | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   result=grTexTextureMemRequired(evenOdd, info); | ||||
|   END_BOARD_LOCK(); | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| FxU32 FX_grTexMinAddress(GrChipID_t tmu) { | ||||
|   FxU32 result; | ||||
|  | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   result=grTexMinAddress(tmu); | ||||
|   END_BOARD_LOCK(); | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| extern FxU32 FX_grTexMaxAddress(GrChipID_t tmu) { | ||||
|   FxU32 result; | ||||
|  | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   result=grTexMaxAddress(tmu); | ||||
|   END_BOARD_LOCK(); | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| FxBool FX_grSstControl(FxU32 code) | ||||
| { | ||||
| #if defined(FX_GLIDE3) | ||||
|   /* The glide 3 sources call for grEnable/grDisable to be called in exchange | ||||
|    * for grSstControl. */ | ||||
|   switch(code) { | ||||
|     case GR_CONTROL_ACTIVATE: | ||||
|       grEnable(GR_PASSTHRU); | ||||
|       break; | ||||
|     case GR_CONTROL_DEACTIVATE: | ||||
|       grDisable(GR_PASSTHRU); | ||||
|       break; | ||||
|   } | ||||
|   /* Appearently GR_CONTROL_RESIZE can be ignored. */ | ||||
|   return 1;  /* OK? */ | ||||
| #else | ||||
|   FxU32 result; | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   result = grSstControl(code); | ||||
|   END_BOARD_LOCK(); | ||||
|   return result; | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
| #if defined(FX_GLIDE3) | ||||
| @@ -90,39 +180,33 @@ void FX_grGammaCorrectionValue(float val) | ||||
| /* ToDo */ | ||||
| } | ||||
|  | ||||
| void FX_grSstControl(int par) | ||||
| { | ||||
|   (void)par; | ||||
|   /* ToDo */ | ||||
| } | ||||
| int FX_getFogTableSize(void) | ||||
| { | ||||
|    int result; | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    grGet(GR_FOG_TABLE_ENTRIES,sizeof(int),(void*)&result); | ||||
|    END_BOARD_LOCK(); | ||||
|    return result;  | ||||
| } | ||||
|  | ||||
| int FX_getGrStateSize(void) | ||||
| { | ||||
|    int result; | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    grGet(GR_GLIDE_STATE_SIZE,sizeof(int),(void*)&result); | ||||
|     | ||||
|    END_BOARD_LOCK(); | ||||
|  | ||||
|    return result; | ||||
|     | ||||
| } | ||||
| int FX_grBufferNumPending() | ||||
| { | ||||
|    int result; | ||||
|    grGet(GR_PENDING_BUFFERSWAPS,sizeof(int),(void*)&result); | ||||
|     | ||||
|    return result; | ||||
| } | ||||
|  | ||||
| int FX_grSstScreenWidth() | ||||
| { | ||||
|    FxI32 result[4]; | ||||
|     | ||||
|  | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    grGet(GR_VIEWPORT,sizeof(FxI32)*4,result); | ||||
|    END_BOARD_LOCK(); | ||||
|     | ||||
|    return result[2]; | ||||
| } | ||||
| @@ -130,15 +214,19 @@ int FX_grSstScreenWidth() | ||||
| int FX_grSstScreenHeight() | ||||
| { | ||||
|    FxI32 result[4]; | ||||
|     | ||||
|  | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    grGet(GR_VIEWPORT,sizeof(FxI32)*4,result); | ||||
|    END_BOARD_LOCK(); | ||||
|     | ||||
|    return result[3]; | ||||
| } | ||||
|  | ||||
| void FX_grGlideGetVersion(char *buf) | ||||
| { | ||||
|    strcpy(buf,grGetString(GR_VERSION)); | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   strcpy(buf,grGetString(GR_VERSION)); | ||||
|   END_BOARD_LOCK(); | ||||
| } | ||||
|  | ||||
| void FX_grSstPerfStats(GrSstPerfStats_t *st) | ||||
| @@ -154,74 +242,91 @@ void FX_grSstPerfStats(GrSstPerfStats_t *st) | ||||
| void FX_grAADrawLine(GrVertex *a,GrVertex *b) | ||||
| { | ||||
|    /* ToDo */ | ||||
|    BEGIN_CLIP_LOOP(); | ||||
|    grDrawLine(a,b); | ||||
|    END_CLIP_LOOP(); | ||||
| } | ||||
|  | ||||
| void FX_grAADrawPoint(GrVertex *a) | ||||
| { | ||||
|   BEGIN_CLIP_LOOP(); | ||||
|   grDrawPoint(a); | ||||
|   END_CLIP_LOOP(); | ||||
| } | ||||
|  | ||||
| #if FX_USE_PARGB | ||||
| void FX_setupGrVertexLayout(void) | ||||
| { | ||||
|    grReset(GR_VERTEX_PARAMETER); | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   grReset(GR_VERTEX_PARAMETER); | ||||
|     | ||||
|    grCoordinateSpace(GR_WINDOW_COORDS); | ||||
|    grVertexLayout(GR_PARAM_XY,  	GR_VERTEX_X_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_PARGB, 	GR_VERTEX_PARGB_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_Q,		GR_VERTEX_OOW_OFFSET << 2,	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_Z,           GR_VERTEX_OOZ_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_ST0, 	GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);	 | ||||
|    grVertexLayout(GR_PARAM_Q0,  	GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);  | ||||
|    grVertexLayout(GR_PARAM_ST1, 	GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|    grVertexLayout(GR_PARAM_Q1,  	GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|   grCoordinateSpace(GR_WINDOW_COORDS); | ||||
|   grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);	 | ||||
|   grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);  | ||||
|   grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|   grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|   END_BOARD_LOCK(); | ||||
| } | ||||
| #else /* FX_USE_PARGB */ | ||||
| void FX_setupGrVertexLayout(void) | ||||
| { | ||||
|    grReset(GR_VERTEX_PARAMETER); | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   grReset(GR_VERTEX_PARAMETER); | ||||
|     | ||||
|    grCoordinateSpace(GR_WINDOW_COORDS); | ||||
|    grVertexLayout(GR_PARAM_XY,  	GR_VERTEX_X_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_RGB, 	GR_VERTEX_R_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|  /*  grVertexLayout(GR_PARAM_Z,   	GR_VERTEX_Z_OFFSET << 2, 	GR_PARAM_ENABLE); */ | ||||
|    grVertexLayout(GR_PARAM_A,   	GR_VERTEX_A_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_Q,		GR_VERTEX_OOW_OFFSET << 2,	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_Z,           GR_VERTEX_OOZ_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|    grVertexLayout(GR_PARAM_ST0, 	GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);	 | ||||
|    grVertexLayout(GR_PARAM_Q0,  	GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);  | ||||
|    grVertexLayout(GR_PARAM_ST1, 	GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|    grVertexLayout(GR_PARAM_Q1,  	GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|   grCoordinateSpace(GR_WINDOW_COORDS); | ||||
|   grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_RGB, GR_VERTEX_R_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2,	GR_PARAM_ENABLE); | ||||
|   grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);	 | ||||
|   grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE); | ||||
|   grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);	 | ||||
|   grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE); | ||||
|   END_BOARD_LOCK(); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| void FX_grHints(GrHint_t hintType, FxU32 hintMask) | ||||
| void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask) | ||||
| { | ||||
|    switch(hintType) { | ||||
|       case GR_HINT_STWHINT: | ||||
|       { | ||||
|         if (hintMask & GR_STWHINT_W_DIFF_TMU0) | ||||
|            grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|         else | ||||
|            grVertexLayout(GR_PARAM_Q0,GR_VERTEX_OOW_TMU0_OFFSET << 2, 	GR_PARAM_DISABLE); | ||||
|             | ||||
|         if (hintMask & GR_STWHINT_ST_DIFF_TMU1) | ||||
|             grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|         else | ||||
|             grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE); | ||||
|   switch(hintType) { | ||||
|   case GR_HINT_STWHINT: | ||||
|     { | ||||
|       if (hintMask & GR_STWHINT_W_DIFF_TMU0) | ||||
| 	grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, 	GR_PARAM_ENABLE); | ||||
|       else | ||||
| 	grVertexLayout(GR_PARAM_Q0,GR_VERTEX_OOW_TMU0_OFFSET << 2, 	GR_PARAM_DISABLE); | ||||
|        | ||||
|       if (hintMask & GR_STWHINT_ST_DIFF_TMU1) | ||||
| 	grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE); | ||||
|       else | ||||
| 	grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE); | ||||
|          | ||||
|         if (hintMask & GR_STWHINT_W_DIFF_TMU1) | ||||
|             grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2,	GR_PARAM_ENABLE); | ||||
|         else | ||||
|             grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2,	GR_PARAM_DISABLE); | ||||
|       	 | ||||
|       } | ||||
|    } | ||||
|       if (hintMask & GR_STWHINT_W_DIFF_TMU1) | ||||
| 	grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2,	GR_PARAM_ENABLE); | ||||
|       else | ||||
| 	grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2,	GR_PARAM_DISABLE); | ||||
|        | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| void FX_grHints(GrHint_t hintType, FxU32 hintMask) { | ||||
|   BEGIN_BOARD_LOCK(); | ||||
|   FX_grHints_NoLock(hintType, hintMask); | ||||
|   END_BOARD_LOCK(); | ||||
| } | ||||
|  | ||||
| int FX_grSstQueryHardware(GrHwConfiguration *config) | ||||
| { | ||||
|    int i,j; | ||||
|    int numFB; | ||||
|  | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    grGet(GR_NUM_BOARDS,4,(void*)&(config->num_sst)); | ||||
|    if (config->num_sst == 0) | ||||
|    	return 0; | ||||
| @@ -246,11 +351,81 @@ int FX_grSstQueryHardware(GrHwConfiguration *config) | ||||
|       	 config->SSTs[i].sstBoard.VoodooConfig.tmuConfig[j].tmuRam /= 1024*1024; | ||||
|       } | ||||
|    } | ||||
|    END_BOARD_LOCK(); | ||||
|    return 1; | ||||
| } | ||||
|  | ||||
| #else | ||||
|  | ||||
| int FX_grSstScreenWidth() | ||||
| { | ||||
|    int i; | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    i = grSstScreenWidth(); | ||||
|    END_BOARD_LOCK(); | ||||
|    return i; | ||||
| } | ||||
|  | ||||
| int FX_grSstScreenHeight() | ||||
| { | ||||
|    int i; | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    i = grSstScreenHeight(); | ||||
|    END_BOARD_LOCK(); | ||||
|    return i; | ||||
| } | ||||
|  | ||||
| int FX_grSstQueryHardware(GrHwConfiguration *c)	 | ||||
| { | ||||
|    int i; | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    i = grSstQueryHardware(c); | ||||
|    END_BOARD_LOCK(); | ||||
|    return i; | ||||
| }  | ||||
|  | ||||
|  | ||||
| #endif  /* FX_GLIDE3 */ | ||||
|  | ||||
| /* It appears to me that this function is needed either way. */ | ||||
| FX_GrContext_t FX_grSstWinOpen( FxU32                hWnd, | ||||
|                                 GrScreenResolution_t screen_resolution, | ||||
|                                 GrScreenRefresh_t    refresh_rate, | ||||
|                                 GrColorFormat_t      color_format, | ||||
|                                 GrOriginLocation_t   origin_location, | ||||
|                                 int                  nColBuffers, | ||||
|                                 int                  nAuxBuffers) | ||||
| { | ||||
|    FX_GrContext_t i; | ||||
|    BEGIN_BOARD_LOCK(); | ||||
|    i = grSstWinOpen( hWnd, | ||||
|                      screen_resolution, | ||||
|                      refresh_rate, | ||||
|                      color_format, | ||||
|                      origin_location, | ||||
|                      nColBuffers, | ||||
|                      nAuxBuffers ); | ||||
|     | ||||
|    /* | ||||
|    fprintf(stderr,  | ||||
|            "grSstWinOpen( win %d res %d ref %d fmt %d\n" | ||||
|            "              org %d ncol %d naux %d )\n" | ||||
|            " ==> %d\n", | ||||
|            hWnd, | ||||
|            screen_resolution, | ||||
|            refresh_rate, | ||||
|            color_format, | ||||
|            origin_location, | ||||
|            nColBuffers, | ||||
|            nAuxBuffers, | ||||
|            i); | ||||
|    */ | ||||
|    END_BOARD_LOCK(); | ||||
|    return i; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| #endif  | ||||
| #else | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -1,26 +1,48 @@ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  *  | ||||
|  * | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  *  | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  *  | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef __FX_GLIDE_WARPER__ | ||||
| #define __FX_GLIDE_WARPER__ | ||||
|  | ||||
| @@ -201,23 +223,23 @@ typedef struct | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   float x, y;         /* X and Y in screen space */ | ||||
|   float ooz;          /* 65535/Z (used for Z-buffering) */ | ||||
|   float oow;          /* 1/W (used for W-buffering, texturing) */ | ||||
|   float r, g, b, a;   /* R, G, B, A [0..255.0] */ | ||||
|   float z;            /* Z is ignored */ | ||||
|   float x, y, z;                /* X, Y, and Z of scrn space -- Z is ignored */ | ||||
|   float r, g, b;                /* R, G, B, ([0..255.0]) */ | ||||
|   float ooz;                    /* 65535/Z (used for Z-buffering) */ | ||||
|   float a;                      /* Alpha [0..255.0] */ | ||||
|   float oow;                    /* 1/W (used for W-buffering, texturing) */ | ||||
|   GrTmuVertex  tmuvtx[GLIDE_NUM_TMU]; | ||||
| } GrVertex; | ||||
|  | ||||
| #define GR_VERTEX_X_OFFSET              0 | ||||
| #define GR_VERTEX_Y_OFFSET              1 | ||||
| #define GR_VERTEX_OOZ_OFFSET            2 | ||||
| #define GR_VERTEX_OOW_OFFSET            3 | ||||
| #define GR_VERTEX_R_OFFSET              4 | ||||
| #define GR_VERTEX_G_OFFSET              5 | ||||
| #define GR_VERTEX_B_OFFSET              6 | ||||
| #define GR_VERTEX_Z_OFFSET              2 | ||||
| #define GR_VERTEX_R_OFFSET              3 | ||||
| #define GR_VERTEX_G_OFFSET              4 | ||||
| #define GR_VERTEX_B_OFFSET              5 | ||||
| #define GR_VERTEX_OOZ_OFFSET            6 | ||||
| #define GR_VERTEX_A_OFFSET              7 | ||||
| #define GR_VERTEX_Z_OFFSET              8 | ||||
| #define GR_VERTEX_OOW_OFFSET            8 | ||||
| #define GR_VERTEX_SOW_TMU0_OFFSET       9 | ||||
| #define GR_VERTEX_TOW_TMU0_OFFSET       10 | ||||
| #define GR_VERTEX_OOW_TMU0_OFFSET       11 | ||||
| @@ -233,29 +255,89 @@ typedef struct | ||||
|  * Glide2 functions for Glide3 | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
| #define FX_grTexDownloadTable(TMU,type,data)		grTexDownloadTable(type,data) | ||||
| #define FX_grTexDownloadTable(TMU,type,data)	\ | ||||
|   do { 						\ | ||||
|     BEGIN_BOARD_LOCK(); 			\ | ||||
|     grTexDownloadTable(type,data); 		\ | ||||
|     END_BOARD_LOCK(); 				\ | ||||
|   } while (0); | ||||
| #define FX_grTexDownloadTable_NoLock(TMU,type,data) \ | ||||
|   grTexDownloadTable(type, data) | ||||
| #else | ||||
| #define FX_grTexDownloadTable(TMU,type,data) 		grTexDownloadTable(TMU,type,data) | ||||
| #define FX_grTexDownloadTable(TMU,type,data) 	\ | ||||
|   do {						\ | ||||
|     BEGIN_BOARD_LOCK();				\ | ||||
|     grTexDownloadTable(TMU,type,data);		\ | ||||
|     END_BOARD_LOCK();				\ | ||||
|   } while (0); | ||||
| #define FX_grTexDownloadTable_NoLock grTexDownloadTable | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Flush | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
| #define FX_grFlush		grFlush | ||||
| #define FX_grFlush()	\ | ||||
|   do {			\ | ||||
|     BEGIN_BOARD_LOCK(); \ | ||||
|     grFlush();		\ | ||||
|     END_BOARD_LOCK();	\ | ||||
|   } while (0) | ||||
| #else | ||||
| #define FX_grFlush		grSstIdle | ||||
| #define FX_grFlush()	\ | ||||
|   do {			\ | ||||
|     BEGIN_BOARD_LOCK(); \ | ||||
|     grSstIdle();	\ | ||||
|     END_BOARD_LOCK();	\ | ||||
|   } while (0) | ||||
| #endif	 | ||||
|  | ||||
| #define FX_grFinish()	\ | ||||
|   do {			\ | ||||
|     BEGIN_BOARD_LOCK(); \ | ||||
|     grFinish();		\ | ||||
|     END_BOARD_LOCK();	\ | ||||
|   } while (0) | ||||
|  | ||||
| /* | ||||
|  * Write region: ToDo possible exploit the PixelPipe parameter. | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
| #define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)	\ | ||||
| 	grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data) | ||||
| #define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)		\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data);	\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while(0) | ||||
| #else | ||||
| #define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)	\ | ||||
| 	grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) | ||||
| #define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)		\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Read region | ||||
|  */ | ||||
| #define FX_grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data)			\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data);				\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0); | ||||
|  | ||||
| /* | ||||
|  * Draw triangle | ||||
|  */ | ||||
| #define FX_grDrawTriangle(a,b,c)	\ | ||||
|   do {					\ | ||||
|     BEGIN_CLIP_LOOP();			\ | ||||
|     grDrawTriangle(a,b,c);		\ | ||||
|     END_CLIP_LOOP();			\ | ||||
|   } while (0) | ||||
|  | ||||
| /* | ||||
|  * For Lod/LodLog2 conversion. | ||||
|  */ | ||||
| @@ -288,12 +370,14 @@ typedef struct | ||||
| #else | ||||
| 	#define FX_largeLodValue(info)		((int)(info).largeLod) | ||||
| #endif | ||||
| #define FX_largeLodValue_NoLock FX_largeLodValue | ||||
|  | ||||
| #if defined(FX_GLIDE3) | ||||
| 	#define FX_smallLodValue(info)		((int)(GR_LOD_256-(info).smallLodLog2)) | ||||
| #else | ||||
| 	#define FX_smallLodValue(info)		((int)(info).smallLod) | ||||
| #endif | ||||
| #define FX_smallLodValue_NoLock FX_smallLodValue | ||||
|  | ||||
| #if defined(FX_GLIDE3) | ||||
| 	#define FX_valueToLod(val)		((GrLOD_t)(GR_LOD_256-val)) | ||||
| @@ -304,13 +388,9 @@ typedef struct | ||||
| /* | ||||
|  * ScreenWidth/Height stuff. | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
| 	extern int FX_grSstScreenWidth(); | ||||
| 	extern int FX_grSstScreenHeight(); | ||||
| #else | ||||
| 	#define FX_grSstScreenWidth()		grSstScreenWidth() | ||||
| 	#define FX_grSstScreenHeight()		grSstScreenHeight() | ||||
| #endif | ||||
| 	extern int FX_grSstScreenWidth(void); | ||||
| 	extern int FX_grSstScreenHeight(void); | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
| @@ -319,7 +399,12 @@ typedef struct | ||||
| #if defined(FX_GLIDE3) | ||||
| 	extern void FX_grGlideGetVersion(char *buf); | ||||
| #else | ||||
| 	#define FX_grGlideGetVersion		grGlideGetVersion	 | ||||
| 	#define FX_grGlideGetVersion(b)	\ | ||||
| 	do {				\ | ||||
| 	  BEGIN_BOARD_LOCK();		\ | ||||
| 	  grGlideGetVersion(b);		\ | ||||
| 	  END_BOARD_LOCK();		\ | ||||
| 	} while (0) | ||||
| #endif | ||||
| /* | ||||
|  * Performance statistics | ||||
| @@ -327,25 +412,33 @@ typedef struct | ||||
| #if defined(FX_GLIDE3) | ||||
|         extern void FX_grSstPerfStats(GrSstPerfStats_t *st); | ||||
| #else | ||||
| 	#define FX_grSstPerfStats		grSstPerfStats | ||||
| 	#define FX_grSstPerfStats(s)	\ | ||||
| 	do {				\ | ||||
| 	  BEGIN_BOARD_LOCK();		\ | ||||
| 	  grSstPerfStats(s);		\ | ||||
| 	  END_BOARD_LOCK();		\ | ||||
| 	} while (0) | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Hardware Query | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
|        extern int FX_grSstQueryHardware(GrHwConfiguration *config); | ||||
| #else | ||||
|        #define FX_grSstQueryHardware		grSstQueryHardware		 | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * GrHints | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
|         extern void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask); | ||||
| 	extern void FX_grHints(GrHint_t hintType, FxU32 hintMask); | ||||
| #else | ||||
| 	#define FX_grHints			grHints | ||||
| 	#define FX_grHints(t,m)		\ | ||||
| 	do {				\ | ||||
| 	  BEGIN_BOARD_LOCK();		\ | ||||
| 	  grHints(t, m);		\ | ||||
| 	  END_BOARD_LOCK();		\ | ||||
| 	} while(0) | ||||
|         #define FX_grHints_NoLock grHints | ||||
| #endif | ||||
| /* | ||||
|  * Antialiashed line+point drawing. | ||||
| @@ -353,13 +446,23 @@ typedef struct | ||||
| #if defined(FX_GLIDE3) | ||||
| 	extern void FX_grAADrawLine(GrVertex *a,GrVertex *b); | ||||
| #else | ||||
| 	#define FX_grAADrawLine			grAADrawLine | ||||
| 	#define FX_grAADrawLine(a,b)	\ | ||||
| 	do {				\ | ||||
| 	  BEGIN_CLIP_LOOP();		\ | ||||
| 	  grAADrawLine(a,b);		\ | ||||
| 	  END_CLIP_LOOP();		\ | ||||
| 	} while (0) | ||||
| #endif | ||||
|  | ||||
| #if defined(FX_GLIDE3) | ||||
| 	extern void FX_grAADrawPoint(GrVertex *a); | ||||
| #else | ||||
| 	#define FX_grAADrawPoint		grAADrawPoint | ||||
| 	#define FX_grAADrawPoint(a)	\ | ||||
| 	do {				\ | ||||
| 	  BEGIN_CLIP_LOOP();		\ | ||||
| 	  grAADrawPoint(a);		\ | ||||
| 	  END_CLIP_LOOP();		\ | ||||
| 	} while (0) | ||||
| #endif | ||||
|  | ||||
| /* | ||||
| @@ -373,31 +476,345 @@ typedef struct | ||||
| /* | ||||
|  * grSstControl stuff | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
| 	extern void FX_grSstControl(int par); | ||||
| #else | ||||
| 	#define FX_grSstControl				grSstControl | ||||
| #endif | ||||
| extern FxBool FX_grSstControl(FxU32 code); | ||||
|  | ||||
| /* | ||||
|  * grGammaCorrectionValue | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
|       extern void FX_grGammaCorrectionValue(float val); | ||||
| #else | ||||
|       #define FX_grGammaCorrectionValue			grGammaCorrectionValue | ||||
|       #define FX_grGammaCorrectionValue(v)	\ | ||||
|       do {					\ | ||||
|         BEGIN_BOARD_LOCK();			\ | ||||
| 	grGammaCorrectionValue(v)		\ | ||||
|         END_BOARD_LOCK();			\ | ||||
|       } while (0) | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * WinOpen/Close. | ||||
|  */ | ||||
| #if defined(FX_GLIDE3) | ||||
|        #define FX_grSstWinOpen(hWnd,screen_resolution,refresh_rate,color_format,origin_location,nColBuffers,nAuxBuffers) \ | ||||
|       		  grSstWinOpen(-1,screen_resolution,refresh_rate,color_format,origin_location,nColBuffers,nAuxBuffers) | ||||
|        #define FX_grSstWinClose		grSstWinClose | ||||
| #define FX_grSstWinClose(w)	\ | ||||
|   do { 				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grSstWinClose(w);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
| #else | ||||
|        #define FX_grSstWinOpen		grSstWinOpen | ||||
|        #define FX_grSstWinClose(win)	grSstWinClose() | ||||
| #define FX_grSstWinClose(w)	\ | ||||
|   do { 				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grSstWinClose();		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
| #endif | ||||
|  | ||||
|  | ||||
| extern FX_GrContext_t FX_grSstWinOpen( FxU32                hWnd, | ||||
|                                        GrScreenResolution_t screen_resolution, | ||||
|                                        GrScreenRefresh_t    refresh_rate, | ||||
|                                        GrColorFormat_t      color_format, | ||||
|                                        GrOriginLocation_t   origin_location, | ||||
|                                        int                  nColBuffers, | ||||
|                                        int                  nAuxBuffers); | ||||
|  | ||||
|  | ||||
| #define FX_grDrawLine(v1, v2)	\ | ||||
|   do {				\ | ||||
|     BEGIN_CLIP_LOOP();		\ | ||||
|     grDrawLine(v1, v2);		\ | ||||
|     END_CLIP_LOOP();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDrawPoint(p)	\ | ||||
|   do {				\ | ||||
|     BEGIN_CLIP_LOOP();		\ | ||||
|     grDrawPoint(p);		\ | ||||
|     END_CLIP_LOOP();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDitherMode(m)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grDitherMode(m);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grRenderBuffer(b)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grRenderBuffer(b);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grBufferClear(c, a, d)	\ | ||||
|   do {					\ | ||||
|     BEGIN_CLIP_LOOP();			\ | ||||
|     grBufferClear(c, a, d);		\ | ||||
|     END_CLIP_LOOP();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDepthMask(m)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grDepthMask(m);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grColorMask(c, a)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grColorMask(c, a);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| extern FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,  | ||||
| 			   GrLfbWriteMode_t writeMode,  | ||||
| 			   GrOriginLocation_t origin, FxBool pixelPipeline,  | ||||
| 			   GrLfbInfo_t *info ); | ||||
|  | ||||
| #define FX_grLfbUnlock(t, b)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grLfbUnlock(t, b);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grConstantColorValue(v)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grConstantColorValue(v);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grConstantColorValue_NoLock grConstantColorValue | ||||
|  | ||||
| #define FX_grAADrawTriangle(a, b, c, ab, bc, ca)	\ | ||||
|   do {							\ | ||||
|     BEGIN_CLIP_LOOP();					\ | ||||
|     grAADrawTriangle(a, b, c, ab, bc, ca);		\ | ||||
|     END_CLIP_LOOP();					\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grAlphaBlendFunction(rs, rd, as, ad)	\ | ||||
|   do {						\ | ||||
|     BEGIN_BOARD_LOCK();				\ | ||||
|     grAlphaBlendFunction(rs, rd, as, ad);	\ | ||||
|     END_BOARD_LOCK();				\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grAlphaCombine(func, fact, loc, oth, inv)	\ | ||||
|   do {							\ | ||||
|     BEGIN_BOARD_LOCK();					\ | ||||
|     grAlphaCombine(func, fact, loc, oth, inv);		\ | ||||
|     END_BOARD_LOCK();					\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grAlphaCombine_NoLock grAlphaCombine | ||||
|  | ||||
| #define FX_grAlphaTestFunction(f)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grAlphaTestFunction(f);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grAlphaTestReferenceValue(v)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grAlphaTestReferenceValue(v);	\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grClipWindow(minx, miny, maxx, maxy)	\ | ||||
|   do {						\ | ||||
|     BEGIN_BOARD_LOCK();				\ | ||||
|     grClipWindow(minx, miny, maxx, maxy);	\ | ||||
|     END_BOARD_LOCK();				\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grClipWindow_NoLock grClipWindow | ||||
|  | ||||
| #define FX_grColorCombine(func, fact, loc, oth, inv)	\ | ||||
|   do {							\ | ||||
|     BEGIN_BOARD_LOCK();					\ | ||||
|     grColorCombine(func, fact, loc, oth, inv);		\ | ||||
|     END_BOARD_LOCK();					\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grColorCombine_NoLock grColorCombine | ||||
|  | ||||
| #define FX_grCullMode(m)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grCullMode(m);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDepthBiasLevel(lev)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grDepthBiasLevel(lev);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDepthBufferFunction(func)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grDepthBufferFunction(func);	\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grFogColorValue(c)		\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grFogColorValue(c);			\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grFogMode(m)	\ | ||||
|   do {			\ | ||||
|     BEGIN_BOARD_LOCK(); \ | ||||
|     grFogMode(m);	\ | ||||
|     END_BOARD_LOCK();	\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grFogTable(t)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grFogTable(t);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexClampMode(t, sc, tc)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grTexClampMode(t, sc, tc);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexClampMode_NoLock grTexClampMode | ||||
|  | ||||
| #define FX_grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv)	\ | ||||
|   do {									\ | ||||
|     BEGIN_BOARD_LOCK();							\ | ||||
|     grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv);		\ | ||||
|     END_BOARD_LOCK();							\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexCombine_NoLock grTexCombine | ||||
|  | ||||
| #define FX_grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d)	\ | ||||
|   do {									\ | ||||
|     BEGIN_BOARD_LOCK();							\ | ||||
|     grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d);		\ | ||||
|     END_BOARD_LOCK();							\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexDownloadMipMapLevel_NoLock grTexDownloadMipMapLevel | ||||
|  | ||||
| #define FX_grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e);	\ | ||||
|   do {									    \ | ||||
|     BEGIN_BOARD_LOCK();							    \ | ||||
|     grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e); \ | ||||
|     END_BOARD_LOCK();							    \ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexFilterMode(t, minf, magf)	\ | ||||
|   do {						\ | ||||
|     BEGIN_BOARD_LOCK();				\ | ||||
|     grTexFilterMode(t, minf, magf);		\ | ||||
|     END_BOARD_LOCK();				\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexFilterMode_NoLock grTexFilterMode | ||||
|  | ||||
| extern FxU32 FX_grTexMinAddress(GrChipID_t tmu); | ||||
| extern FxU32 FX_grTexMaxAddress(GrChipID_t tmu); | ||||
|  | ||||
| #define FX_grTexMipMapMode(t, m, lod)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grTexMipMapMode(t, m, lod);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexMipMapMode_NoLock grTexMipMapMode | ||||
|  | ||||
| #define FX_grTexSource(t, sa, eo, i)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grTexSource(t, sa, eo, i);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grTexSource_NoLock grTexSource | ||||
|  | ||||
| extern FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo *info); | ||||
| #define FX_grTexTextureMemRequired_NoLock grTexTextureMemRequired | ||||
|  | ||||
| #define FX_grGlideGetState(s)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grGlideGetState(s);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDRIBufferSwap(i)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grDRIBufferSwap(i);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grSstSelect(b)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grSstSelect(b);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grSstSelect_NoLock grSstSelect | ||||
|  | ||||
| #define FX_grGlideSetState(s)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grGlideSetState(s);		\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDepthBufferMode(m)	\ | ||||
|   do {				\ | ||||
|     BEGIN_BOARD_LOCK();		\ | ||||
|     grDepthBufferMode(m);	\ | ||||
|     END_BOARD_LOCK();		\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grLfbWriteColorFormat(f)	\ | ||||
|   do {					\ | ||||
|     BEGIN_BOARD_LOCK();			\ | ||||
|     grLfbWriteColorFormat(f);		\ | ||||
|     END_BOARD_LOCK();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grDrawVertexArray(m, c, p)	\ | ||||
|   do {					\ | ||||
|     BEGIN_CLIP_LOOP();			\ | ||||
|     grDrawVertexArray(m, c, p);		\ | ||||
|     END_CLIP_LOOP();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grGlideShutdown()		\ | ||||
|   do {					\ | ||||
|     BEGIN_CLIP_LOOP();			\ | ||||
|     grGlideShutdown();			\ | ||||
|     END_CLIP_LOOP();			\ | ||||
|   } while (0) | ||||
|  | ||||
| #define FX_grGlideInit_NoLock grGlideInit | ||||
| #define FX_grSstWinOpen_NoLock grSstWinOpen | ||||
|  | ||||
| extern int FX_getFogTableSize(void); | ||||
| extern int FX_getGrStateSize(void); | ||||
|  | ||||
| #endif /* __FX_GLIDE_WARPER__ */ | ||||
|  | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,25 +1,53 @@ | ||||
| /* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included | ||||
|  * in all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
|  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
|  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * | ||||
|  * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the | ||||
|  * terms stated above. | ||||
|  * | ||||
|  * Thank you for your contribution, David! | ||||
|  * | ||||
|  * Please make note of the above copyright/license statement.  If you | ||||
|  * contributed code or bug fixes to this code under the previous (GNU | ||||
|  * Library) license and object to the new license, your code will be | ||||
|  * removed at your request.  Please see the Mesa docs/COPYRIGHT file | ||||
|  * for more information. | ||||
|  * | ||||
|  * Additional Mesa/3Dfx driver developers: | ||||
|  *   Daryll Strauss <daryll@precisioninsight.com> | ||||
|  *   Keith Whitwell <keith@precisioninsight.com> | ||||
|  * | ||||
|  * See fxapi.h for more revision/author details. | ||||
|  */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* fxwgl.c - Microsoft wgl functions emulation for | ||||
|  *           3Dfx VooDoo/Mesa interface | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  * | ||||
|  * See the file fxapi.c for more informations about authors | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifdef __WIN32__ | ||||
|  | ||||
| @@ -243,11 +271,11 @@ LONG GLAPIENTRY __wglMonitor(HWND hwnd,UINT message,UINT wParam,LONG lParam) | ||||
|         static int moving = 0; | ||||
|         if (!moving) { | ||||
|           if(fxQueryHardware()!=GR_SSTTYPE_VOODOO) { | ||||
|             if(!grSstControl(GR_CONTROL_RESIZE)) { | ||||
|             if(!FX_grSstControl(GR_CONTROL_RESIZE)) { | ||||
|               moving = 1; | ||||
|               SetWindowPos(hwnd, 0, 0, 0, 300, 300, SWP_NOMOVE|SWP_NOZORDER); | ||||
|               moving = 0; | ||||
|               if(!grSstControl(GR_CONTROL_RESIZE)) { | ||||
|               if(!FX_grSstControl(GR_CONTROL_RESIZE)) { | ||||
|                 /*MessageBox(0,_T("Error changing windowsize"),_T("fxMESA"),MB_OK);*/ | ||||
|                 PostMessage(hWND,WM_CLOSE,0,0); | ||||
|               } | ||||
| @@ -255,7 +283,7 @@ LONG GLAPIENTRY __wglMonitor(HWND hwnd,UINT message,UINT wParam,LONG lParam) | ||||
|           } | ||||
|  | ||||
|           /* Do the clipping in the glide library */ | ||||
|           grClipWindow(0,0,grSstScreenWidth(),grSstScreenHeight()); | ||||
|           FX_grClipWindow(0,0,FX_grSstScreenWidth(),FX_grSstScreenHeight()); | ||||
|           /* And let the new size set in the context */ | ||||
|           fxMesaUpdateScreenSize(ctx); | ||||
|         } | ||||
| @@ -269,21 +297,22 @@ LONG GLAPIENTRY __wglMonitor(HWND hwnd,UINT message,UINT wParam,LONG lParam) | ||||
|         BOOL fMinimized = (BOOL) HIWORD(wParam); | ||||
|  | ||||
|         if((fActive == WA_INACTIVE) || fMinimized) | ||||
|           grSstControl(GR_CONTROL_DEACTIVATE); | ||||
|           FX_grSstControl(GR_CONTROL_DEACTIVATE); | ||||
|         else | ||||
|           grSstControl(GR_CONTROL_ACTIVATE); | ||||
|           FX_grSstControl(GR_CONTROL_ACTIVATE); | ||||
|       } | ||||
|       break; | ||||
|     case WM_SHOWWINDOW: | ||||
|       break; | ||||
|     case WM_SYSKEYDOWN: | ||||
|     case WM_SYSCHAR: | ||||
|       if(gdiWindowHackEna && (VK_RETURN == wParam)) { | ||||
|         if(gdiWindowHack) { | ||||
|           gdiWindowHack = GL_FALSE; | ||||
|           grSstControl(GR_CONTROL_ACTIVATE); | ||||
|           FX_grSstControl(GR_CONTROL_ACTIVATE); | ||||
|         } else { | ||||
|           gdiWindowHack = GL_TRUE; | ||||
|           grSstControl(GR_CONTROL_DEACTIVATE); | ||||
|           FX_grSstControl(GR_CONTROL_DEACTIVATE); | ||||
|         } | ||||
|       } | ||||
|       break; | ||||
| @@ -382,7 +411,7 @@ HGLRC GLAPIENTRY wglCreateContext(HDC hdc) | ||||
|         gdiWindowHack = GL_FALSE; | ||||
|       else { | ||||
|         gdiWindowHack = GL_TRUE; | ||||
|         grSstControl(GR_CONTROL_DEACTIVATE); | ||||
|         FX_grSstControl(GR_CONTROL_DEACTIVATE); | ||||
|       } | ||||
|     } | ||||
|   } else { | ||||
| @@ -779,7 +808,7 @@ BOOL GLAPIENTRY wglSwapBuffers(HDC hdc) | ||||
|     HDC hdcDIBSection  = CreateCompatibleDC(hdcScreen); | ||||
|     HBITMAP holdBitmap = (HBITMAP) SelectObject(hdcDIBSection, dibHBM); | ||||
|  | ||||
|     grLfbReadRegion(GR_BUFFER_FRONTBUFFER, 0, 0, | ||||
|     FX_grLfbReadRegion(GR_BUFFER_FRONTBUFFER, 0, 0, | ||||
|                     width, height, | ||||
|                     width * 2, | ||||
|                     dibSurfacePtr); | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| /* $Id: osmesa.c,v 1.3 1999/11/11 01:28:41 brianp Exp $ */ | ||||
| /* $Id: osmesa.c,v 1.2.2.3 2000/04/04 00:52:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.3 | ||||
|  * Version:  3.2 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
| @@ -38,7 +38,7 @@ | ||||
| #include "GL/osmesa.h" | ||||
| #include "context.h" | ||||
| #include "depth.h" | ||||
| #include "mem.h" | ||||
| #include "macros.h" | ||||
| #include "matrix.h" | ||||
| #include "types.h" | ||||
| #include "vb.h" | ||||
| @@ -224,6 +224,7 @@ OSMesaContext GLAPIENTRY OSMesaCreateContext( GLenum format, OSMesaContext share | ||||
|                                             indexBits, | ||||
|                                             8, 8, 8, alphaBits ); | ||||
|       if (!osmesa->gl_visual) { | ||||
|          FREE(osmesa); | ||||
|          return NULL; | ||||
|       } | ||||
|  | ||||
| @@ -400,7 +401,7 @@ GLboolean GLAPIENTRY OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum | ||||
|    /* init viewport */ | ||||
|    if (ctx->gl_ctx->Viewport.Width==0) { | ||||
|       /* initialize viewport and scissor box to buffer size */ | ||||
|       _mesa_Viewport( 0, 0, width, height ); | ||||
|       gl_Viewport( ctx->gl_ctx, 0, 0, width, height ); | ||||
|       ctx->gl_ctx->Scissor.Width = width; | ||||
|       ctx->gl_ctx->Scissor.Height = height; | ||||
|    } | ||||
| @@ -631,8 +632,13 @@ static GLbitfield clear( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|             GLuint i, n, *ptr4; | ||||
|             n = osmesa->rowlength * osmesa->height; | ||||
|             ptr4 = (GLuint *) osmesa->buffer; | ||||
|             for (i=0;i<n;i++) { | ||||
|                *ptr4++ = osmesa->clearpixel; | ||||
|             if (osmesa->clearpixel) { | ||||
|                for (i=0;i<n;i++) { | ||||
|                   *ptr4++ = osmesa->clearpixel; | ||||
|                } | ||||
|             } | ||||
|             else { | ||||
|                BZERO(ptr4, n * sizeof(GLuint)); | ||||
|             } | ||||
|          } | ||||
|          else { | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| /* $Id: svgamesa.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ | ||||
| /* $Id: svgamesa.c,v 1.1.1.1.2.3 2000/01/22 20:06:20 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.0 | ||||
|  * Copyright (C) 1995-1998  Brian Paul | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
| @@ -21,23 +21,19 @@ | ||||
|  */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Linux SVGA/Mesa interface. | ||||
|  * | ||||
|  * This interface is not finished!  Still have to implement pixel | ||||
|  * reading functions and double buffering.  Then, look into accelerated | ||||
|  * line and polygon rendering.  And, clean up a bunch of other stuff. | ||||
|  * Any volunteers? | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef SVGA | ||||
|  | ||||
|  | ||||
| #ifdef PC_HEADER | ||||
| #include "all.h" | ||||
| #else | ||||
| @@ -48,35 +44,164 @@ | ||||
| #include "context.h" | ||||
| #include "matrix.h" | ||||
| #include "types.h" | ||||
| #include <string.h> | ||||
| #endif | ||||
|  | ||||
| #include "svgapix.h" | ||||
| #include "svgamesa8.h" | ||||
| #include "svgamesa15.h" | ||||
| #include "svgamesa16.h" | ||||
| #include "svgamesa24.h" | ||||
| #include "svgamesa32.h" | ||||
|  | ||||
| struct svgamesa_context { | ||||
|    GLcontext *gl_ctx;		/* the core Mesa context */ | ||||
|    GLvisual *gl_vis;		/* describes the color buffer */ | ||||
|    GLframebuffer *gl_buffer;	/* the ancillary buffers */ | ||||
|    GLuint index;		/* current color index */ | ||||
|    GLint red, green, blue;	/* current rgb color */ | ||||
|    GLint width, height;		/* size of color buffer */ | ||||
|    GLint depth;			/* bits per pixel (8,16,24 or 32) */ | ||||
| }; | ||||
| struct svga_buffer SVGABuffer; | ||||
| vga_modeinfo * SVGAInfo; | ||||
| SVGAMesaContext SVGAMesa;    /* the current context */ | ||||
|  | ||||
| #ifdef SVGA_DEBUG | ||||
|  | ||||
| static SVGAMesaContext SVGAMesa = NULL;    /* the current context */ | ||||
| #include <sys/types.h> | ||||
| #include <signal.h> | ||||
|  | ||||
| FILE * logfile; | ||||
| char cbuf[1024]={0}; | ||||
|  | ||||
| void SVGAlog(char * what) | ||||
| { | ||||
|  logfile=fopen("svgamesa.log","a"); | ||||
|  if (!logfile) return; | ||||
|  fprintf(logfile,"%s\n",what); | ||||
|  fclose(logfile); | ||||
| }  | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Convert Mesa window Y coordinate to VGA screen Y coordinate: | ||||
|  */ | ||||
| #define FLIP(Y)  (SVGAMesa->height-(Y)-1) | ||||
| /**********************************************************************/ | ||||
| /*****                       Init stuff...                        *****/ | ||||
| /**********************************************************************/ | ||||
|  | ||||
| int SVGAMesaInit( int GraphMode ) | ||||
| {   | ||||
|    vga_init(); | ||||
|    if (!vga_hasmode(GraphMode)) | ||||
|    { | ||||
|     fprintf(stderr,"GraphMode %d unavailable...",GraphMode); | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAMesaInit: invalid GraphMode (doesn't exist)"); | ||||
| #endif     | ||||
|     return(1); | ||||
|    } | ||||
|    SVGAInfo=vga_getmodeinfo(GraphMode);            | ||||
|    if (SVGAInfo->flags & IS_MODEX) | ||||
|    { | ||||
|     fprintf(stderr,"ModeX not implemented..."); | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAMesaInit: invalid GraphMode (ModeX)"); | ||||
| #endif     | ||||
|     return(2); | ||||
|    } | ||||
|    if (!SVGAInfo->bytesperpixel) | ||||
|    { | ||||
|     fprintf(stderr,"1 / 4 bit color not implemented..."); | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAMesaInit: invalid GraphMode (1 or 4 bit)"); | ||||
| #endif     | ||||
|     return(3); | ||||
|    } | ||||
|    switch (SVGAInfo->colors) { | ||||
|     case   256: SVGABuffer.Depth = 8;  break; | ||||
|     case 32768: SVGABuffer.Depth = 15; break; | ||||
|     case 65536: SVGABuffer.Depth = 16; break; | ||||
|     default: SVGABuffer.Depth = SVGAInfo->bytesperpixel<<3; break; | ||||
|    } | ||||
|    SVGABuffer.BufferSize=SVGAInfo->linewidth*SVGAInfo->height; | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"SVGAMesaInit: double buffer info.\n" \ | ||||
|                  "              depth  : %d\n" \ | ||||
|                  "              mode   : %d\n" \ | ||||
| 		 "              width  : %d\n" \ | ||||
| 		 "              height : %d\n" \ | ||||
| 		 "              bufsize: %d\n", \ | ||||
| 		 SVGABuffer.Depth,GraphMode,SVGAInfo->linewidth, \ | ||||
| 		 SVGAInfo->height,SVGABuffer.BufferSize); | ||||
|    SVGAlog(cbuf); | ||||
| #endif     | ||||
|    SVGABuffer.FrontBuffer=(void*)malloc(SVGABuffer.BufferSize + 4); | ||||
|    if (!SVGABuffer.FrontBuffer) { | ||||
|     { | ||||
|      fprintf(stderr,"Not enough RAM for FRONT_LEFT_BUFFER..."); | ||||
| #ifdef SVGA_DEBUG | ||||
|      SVGAlog("SVGAMesaInit: Not enough RAM (front buffer)"); | ||||
| #endif     | ||||
|      return(4); | ||||
|     } | ||||
|    }        | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"SVGAMesaInit: FrontBuffer - %p",SVGABuffer.FrontBuffer); | ||||
|    SVGAlog(cbuf); | ||||
| #endif     | ||||
|    SVGABuffer.BackBuffer=(void*)malloc(SVGABuffer.BufferSize + 4); | ||||
|    if (!SVGABuffer.BackBuffer) { | ||||
|     { | ||||
|      free(SVGABuffer.FrontBuffer); | ||||
|      fprintf(stderr,"Not enough RAM for BACK_LEFT_BUFFER..."); | ||||
| #ifdef SVGA_DEBUG | ||||
|      SVGAlog("SVGAMesaInit: Not enough RAM (back buffer)"); | ||||
| #endif     | ||||
|      return(5); | ||||
|     } | ||||
|    }        | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"SVGAMesaInit: BackBuffer - %p",SVGABuffer.BackBuffer); | ||||
|    SVGAlog(cbuf); | ||||
| #endif     | ||||
|  | ||||
|    vga_setmode(GraphMode); | ||||
|    SVGABuffer.VideoRam=vga_getgraphmem(); | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"SVGAMesaInit: VRAM - %p",SVGABuffer.VideoRam); | ||||
|    SVGAlog(cbuf); | ||||
|    sprintf(cbuf,"SVGAMesaInit: done. (Mode %d)",GraphMode); | ||||
|    SVGAlog(cbuf); | ||||
| #endif     | ||||
|    return 0; | ||||
| }    | ||||
|  | ||||
| int SVGAMesaClose( void ) | ||||
| {   | ||||
|  vga_setmode(TEXT);  | ||||
|  free(SVGABuffer.FrontBuffer); | ||||
|  free(SVGABuffer.BackBuffer); | ||||
|  return 0; | ||||
| } | ||||
|  | ||||
| void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue) | ||||
| { | ||||
|  if (ndx<256) vga_setpalette(ndx, red>>2, green>>2, blue>>2); | ||||
| } | ||||
|  | ||||
| /**********************************************************************/ | ||||
| /*****                 Miscellaneous functions                    *****/ | ||||
| /**********************************************************************/ | ||||
|  | ||||
| static void copy_buffer( GLubyte * buffer) { | ||||
|  int size = SVGABuffer.BufferSize, page = 0; | ||||
|  | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"copy_buffer: copy %p to %p",buffer,SVGABuffer.VideoRam); | ||||
|    SVGAlog(cbuf); | ||||
| #endif     | ||||
|  | ||||
|  while(size>0) { | ||||
|  vga_setpage(page++); | ||||
|   if (size>>16) {  | ||||
|    memcpy(SVGABuffer.VideoRam,buffer,0x10000); | ||||
|    buffer+=0x10000; | ||||
|   }else{     | ||||
|    memcpy(SVGABuffer.VideoRam,buffer,size & 0xffff); | ||||
|   } | ||||
|   size-=0xffff;  | ||||
|  } | ||||
| } | ||||
|  | ||||
| static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height ) | ||||
| { | ||||
| @@ -84,279 +209,33 @@ static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height ) | ||||
|    *height = SVGAMesa->height = vga_getydim(); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Set current color index */ | ||||
| static void set_index( GLcontext *ctx, GLuint index ) | ||||
| { | ||||
|    SVGAMesa->index = index; | ||||
|    vga_setcolor( index ); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Set current drawing color */ | ||||
| static void set_color( GLcontext *ctx, | ||||
|                        GLubyte red, GLubyte green, | ||||
|                        GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->red = red; | ||||
|    SVGAMesa->green = green; | ||||
|    SVGAMesa->blue = blue; | ||||
|    vga_setrgbcolor( red, green, blue ); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void clear_index( GLcontext *ctx, GLuint index ) | ||||
| { | ||||
|    /* TODO: Implements glClearIndex() */ | ||||
| } | ||||
|  | ||||
|  | ||||
| static void clear_color( GLcontext *ctx, | ||||
|                          GLubyte red, GLubyte green, | ||||
|                          GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    /* TODO: Implements glClearColor() */ | ||||
| } | ||||
|  | ||||
|  | ||||
| static GLbitfield clear( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|                          GLint x, GLint y, GLint width, GLint height ) | ||||
| { | ||||
|    if (mask & GL_COLOR_BUFFER_BIT) { | ||||
|       vga_clear(); | ||||
|    } | ||||
|    return mask & (~GL_COLOR_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
|  | ||||
| static GLboolean set_buffer( GLcontext *ctx, GLenum buffer ) | ||||
| { | ||||
|    /* TODO: implement double buffering and use this function to select */ | ||||
|    /* between front and back buffers. */ | ||||
|  void * tmpptr; | ||||
|   | ||||
|    if (buffer == GL_FRONT_LEFT) | ||||
|       return GL_TRUE; | ||||
|    { | ||||
| /*    vga_waitretrace(); */ | ||||
|     copy_buffer(SVGABuffer.FrontBuffer); | ||||
|     tmpptr=SVGABuffer.BackBuffer; | ||||
|     SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer; | ||||
|     SVGABuffer.FrontBuffer=tmpptr; | ||||
|     return GL_TRUE; | ||||
|    }     | ||||
|    else if (buffer == GL_BACK_LEFT) | ||||
|       return GL_TRUE; | ||||
|    { | ||||
| /*    vga_waitretrace(); */ | ||||
|     copy_buffer(SVGABuffer.BackBuffer); | ||||
|     return GL_TRUE; | ||||
|    }     | ||||
|    else | ||||
|       return GL_FALSE; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /**********************************************************************/ | ||||
| /*****            Write spans of pixels                           *****/ | ||||
| /*****                                                            *****/ | ||||
| /**********************************************************************/ | ||||
|  | ||||
|  | ||||
| static void write_ci32_span( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                              const GLuint index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    y = FLIP(y); | ||||
|    for (i=0;i<n;i++,x++) { | ||||
|       if (mask[i]) { | ||||
|          vga_setcolor( index[i] ); | ||||
|          vga_drawpixel( x, y ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| static void write_ci8_span( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                             const GLubyte index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    y = FLIP(y); | ||||
|    for (i=0;i<n;i++,x++) { | ||||
|       if (mask[i]) { | ||||
|          vga_setcolor( index[i] ); | ||||
|          vga_drawpixel( x, y ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void write_mono_ci_span( const GLcontext *ctx, GLuint n, | ||||
|                                 GLint x, GLint y, const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    y = FLIP(y); | ||||
|    /* use current color index */ | ||||
|    vga_setcolor( SVGAMesa->index ); | ||||
|    for (i=0;i<n;i++,x++) { | ||||
|       if (mask[i]) { | ||||
|          vga_drawpixel( x, y ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void write_rgba_span( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                              const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    y=FLIP(y); | ||||
|    if (mask) { | ||||
|       /* draw some pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          if (mask[i]) { | ||||
|             vga_setrgbcolor( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ); | ||||
|             vga_drawpixel( x, y ); | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       /* draw all pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          vga_setrgbcolor( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ); | ||||
|          vga_drawpixel( x, y ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void write_mono_rgba_span( const GLcontext *ctx, | ||||
|                                   GLuint n, GLint x, GLint y, | ||||
|                                   const GLubyte mask[]) | ||||
| { | ||||
|    int i; | ||||
|    y=FLIP(y); | ||||
|    /* use current rgb color */ | ||||
|    vga_setrgbcolor( SVGAMesa->red, SVGAMesa->green, SVGAMesa->blue ); | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|       if (mask[i]) { | ||||
|          vga_drawpixel( x, y ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /**********************************************************************/ | ||||
| /*****                 Read spans of pixels                       *****/ | ||||
| /**********************************************************************/ | ||||
|  | ||||
|  | ||||
| static void read_ci32_span( const GLcontext *ctx, | ||||
|                             GLuint n, GLint x, GLint y, GLuint index[]) | ||||
| { | ||||
|    int i; | ||||
|    y = FLIP(y); | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|       index[i] = vga_getpixel( x, y ); | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void read_rgba_span( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                             GLubyte rgba[][4] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|       /* TODO */ | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /**********************************************************************/ | ||||
| /*****                  Write arrays of pixels                    *****/ | ||||
| /**********************************************************************/ | ||||
|  | ||||
|  | ||||
| static void write_ci32_pixels( const GLcontext *ctx, | ||||
|                                GLuint n, const GLint x[], const GLint y[], | ||||
|                                const GLuint index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          vga_setcolor( index[i] ); | ||||
|          vga_drawpixel( x[i], FLIP(y[i]) ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| static void write_mono_ci_pixels( const GLcontext *ctx, GLuint n, | ||||
|                                   const GLint x[], const GLint y[], | ||||
|                                   const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    /* use current color index */ | ||||
|    vga_setcolor( SVGAMesa->index ); | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          vga_drawpixel( x[i], FLIP(y[i]) ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void write_rgba_pixels( const GLcontext *ctx, | ||||
|                                GLuint n, const GLint x[], const GLint y[], | ||||
|                                const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          vga_setrgbcolor( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ); | ||||
|          vga_drawpixel( x[i], FLIP(y[i]) ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void write_mono_rgba_pixels( const GLcontext *ctx, | ||||
|                                     GLuint n, | ||||
|                                     const GLint x[], const GLint y[], | ||||
|                                     const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    /* use current rgb color */ | ||||
|    vga_setrgbcolor( SVGAMesa->red, SVGAMesa->green, SVGAMesa->blue ); | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          vga_drawpixel( x[i], FLIP(y[i]) ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /**********************************************************************/ | ||||
| /*****                   Read arrays of pixels                    *****/ | ||||
| /**********************************************************************/ | ||||
|  | ||||
| /* Read an array of color index pixels. */ | ||||
| static void read_ci32_pixels( const GLcontext *ctx, | ||||
|                               GLuint n, const GLint x[], const GLint y[], | ||||
|                               GLuint index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|       index[i] = vga_getpixel( x[i], FLIP(y[i]) ); | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void read_rgba_pixels( const GLcontext *ctx, | ||||
|                               GLuint n, const GLint x[], const GLint y[], | ||||
|                               GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    /* TODO */ | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void svgamesa_update_state( GLcontext *ctx ) | ||||
| { | ||||
|    /* Initialize all the pointers in the DD struct.  Do this whenever */ | ||||
| @@ -364,13 +243,6 @@ static void svgamesa_update_state( GLcontext *ctx ) | ||||
|  | ||||
|    ctx->Driver.UpdateState = svgamesa_update_state; | ||||
|  | ||||
|    ctx->Driver.ClearIndex = clear_index; | ||||
|    ctx->Driver.ClearColor = clear_color; | ||||
|    ctx->Driver.Clear = clear; | ||||
|  | ||||
|    ctx->Driver.Index = set_index; | ||||
|    ctx->Driver.Color = set_color; | ||||
|  | ||||
|    ctx->Driver.SetBuffer = set_buffer; | ||||
|    ctx->Driver.GetBufferSize = get_buffer_size; | ||||
|  | ||||
| @@ -378,59 +250,119 @@ static void svgamesa_update_state( GLcontext *ctx ) | ||||
|    ctx->Driver.LineFunc = NULL; | ||||
|    ctx->Driver.TriangleFunc = NULL; | ||||
|  | ||||
|    /* Pixel/span writing functions: */ | ||||
|    /* TODO: use different funcs for 8, 16, 32-bit depths */ | ||||
|    ctx->Driver.WriteRGBASpan        = write_rgba_span; | ||||
|    ctx->Driver.WriteMonoRGBASpan    = write_mono_rgba_span; | ||||
|    ctx->Driver.WriteRGBAPixels      = write_rgba_pixels; | ||||
|    ctx->Driver.WriteMonoRGBAPixels  = write_mono_rgba_pixels; | ||||
|    ctx->Driver.WriteCI32Span        = write_ci32_span; | ||||
|    ctx->Driver.WriteCI8Span         = write_ci8_span; | ||||
|    ctx->Driver.WriteMonoCISpan      = write_mono_ci_span; | ||||
|    ctx->Driver.WriteCI32Pixels      = write_ci32_pixels; | ||||
|    ctx->Driver.WriteMonoCIPixels    = write_mono_ci_pixels; | ||||
|    switch (SVGABuffer.Depth) { | ||||
|     case  8: ctx->Driver.ClearIndex = __clear_index8; | ||||
|              ctx->Driver.Clear 	    = __clear8; | ||||
|              ctx->Driver.Index 	    = __set_index8;  | ||||
|  | ||||
|    /* Pixel/span reading functions: */ | ||||
|    /* TODO: use different funcs for 8, 16, 32-bit depths */ | ||||
|    ctx->Driver.ReadCI32Span   = read_ci32_span; | ||||
|    ctx->Driver.ReadRGBASpan   = read_rgba_span; | ||||
|    ctx->Driver.ReadCI32Pixels = read_ci32_pixels; | ||||
|    ctx->Driver.ReadRGBAPixels = read_rgba_pixels; | ||||
|              ctx->Driver.ReadCI32Span         = __read_ci32_span8; | ||||
|              ctx->Driver.ReadCI32Pixels       = __read_ci32_pixels8; | ||||
|              ctx->Driver.WriteCI8Span         = __write_ci8_span8; | ||||
|              ctx->Driver.WriteCI32Span        = __write_ci32_span8; | ||||
|              ctx->Driver.WriteCI32Pixels      = __write_ci32_pixels8; | ||||
|              ctx->Driver.WriteMonoCISpan      = __write_mono_ci_span8; | ||||
|              ctx->Driver.WriteMonoCIPixels    = __write_mono_ci_pixels8; | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAUpdateState: 8 bit mode."); | ||||
| #endif     | ||||
|  | ||||
| 	     break; | ||||
|     case 15: ctx->Driver.ClearColor = __clear_color15; | ||||
|              ctx->Driver.Clear 	    = __clear15; | ||||
|              ctx->Driver.Color 	    = __set_color15; | ||||
|  | ||||
|              ctx->Driver.ReadRGBASpan         = __read_rgba_span15; | ||||
|              ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels15; | ||||
|              ctx->Driver.WriteRGBASpan        = __write_rgba_span15; | ||||
|              ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels15; | ||||
|              ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span15; | ||||
|              ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels15; | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAUpdateState: 15 bit mode."); | ||||
| #endif     | ||||
| 	     break; | ||||
|     case 16: ctx->Driver.ClearColor = __clear_color16; | ||||
|              ctx->Driver.Clear 	    = __clear16; | ||||
|              ctx->Driver.Color 	    = __set_color16; | ||||
|  | ||||
|              ctx->Driver.ReadRGBASpan         = __read_rgba_span16; | ||||
|              ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels16; | ||||
|              ctx->Driver.WriteRGBASpan        = __write_rgba_span16; | ||||
|              ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels16; | ||||
|              ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span16; | ||||
|              ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels16; | ||||
| 	     break; | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAUpdateState: 16 bit mode."); | ||||
| #endif     | ||||
|     case 24: ctx->Driver.ClearColor = __clear_color24; | ||||
|              ctx->Driver.Clear 	    = __clear24; | ||||
|              ctx->Driver.Color 	    = __set_color24; | ||||
|  | ||||
|              ctx->Driver.ReadRGBASpan         = __read_rgba_span24; | ||||
|              ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels24; | ||||
|              ctx->Driver.WriteRGBASpan        = __write_rgba_span24; | ||||
|              ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels24; | ||||
|              ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span24; | ||||
|              ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels24; | ||||
| 	     break; | ||||
| #ifdef SVGA_DEBUG | ||||
|     SVGAlog("SVGAUpdateState: 32 bit mode."); | ||||
| #endif     | ||||
|     case 32: ctx->Driver.ClearColor = __clear_color32; | ||||
|              ctx->Driver.Clear 	    = __clear32; | ||||
|              ctx->Driver.Color 	    = __set_color32; | ||||
|  | ||||
|              ctx->Driver.ReadRGBASpan         = __read_rgba_span32; | ||||
|              ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels32; | ||||
|              ctx->Driver.WriteRGBASpan        = __write_rgba_span32; | ||||
|              ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels32; | ||||
|              ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span32; | ||||
|              ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels32; | ||||
|    }	      | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Create a new VGA/Mesa context and return a handle to it. | ||||
|  */ | ||||
| SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer ) | ||||
| { | ||||
|    SVGAMesaContext ctx; | ||||
| #ifndef DEV | ||||
|    GLboolean rgb_flag; | ||||
|    GLfloat redscale, greenscale, bluescale, alphascale; | ||||
|    GLboolean alpha_flag = GL_FALSE; | ||||
|    int colors; | ||||
|    GLint index_bits; | ||||
|    GLint redbits, greenbits, bluebits, alphabits; | ||||
|  | ||||
|    /* determine if we're in RGB or color index mode */ | ||||
|    colors = vga_getcolors(); | ||||
|    if (colors==32768) { | ||||
|    if ((SVGABuffer.Depth==32) || (SVGABuffer.Depth==24)) { | ||||
|       rgb_flag = GL_TRUE; | ||||
|       redscale = greenscale = bluescale = alphascale = 255.0; | ||||
|       redbits = greenbits = bluebits = 8; | ||||
|       alphabits = 0; | ||||
|       index_bits = 0; | ||||
|    } | ||||
|    else if (colors==256) { | ||||
|    else if (SVGABuffer.Depth==8) { | ||||
|       rgb_flag = GL_FALSE; | ||||
|       redscale = greenscale = bluescale = alphascale = 0.0; | ||||
|       redbits = greenbits = bluebits = alphabits = 0; | ||||
|       index_bits = 8; | ||||
|    } | ||||
|    else { | ||||
|       printf(">16 bit color not implemented yet!\n"); | ||||
|       return NULL; | ||||
|    else if (SVGABuffer.Depth==15) { | ||||
|       rgb_flag = GL_TRUE; | ||||
|       redscale = greenscale = bluescale = alphascale = 31.0; | ||||
|       redbits = greenbits = bluebits = 5; | ||||
|       alphabits = 0; | ||||
|       index_bits = 0; | ||||
|    } | ||||
|    else if (SVGABuffer.Depth==16) { | ||||
|       rgb_flag = GL_TRUE; | ||||
|       redscale = bluescale = alphascale = 31.0; | ||||
|       greenscale = 63.0; | ||||
|       redbits = bluebits = 5; | ||||
|       greenbits = 6; | ||||
|       alphabits = 0; | ||||
|       index_bits = 0; | ||||
|    } | ||||
|  | ||||
|    ctx = (SVGAMesaContext) calloc( 1, sizeof(struct svgamesa_context) ); | ||||
| @@ -459,18 +391,16 @@ SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer ) | ||||
|    ctx->red = ctx->green = ctx->blue = 255; | ||||
|  | ||||
|    ctx->width = ctx->height = 0;  /* temporary until first "make-current" */ | ||||
|  | ||||
| #endif | ||||
|    return ctx; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Destroy the given VGA/Mesa context. | ||||
|  */ | ||||
| void SVGAMesaDestroyContext( SVGAMesaContext ctx ) | ||||
| { | ||||
| #ifndef DEV | ||||
|    if (ctx) { | ||||
|       gl_destroy_visual( ctx->gl_vis ); | ||||
|       gl_destroy_context( ctx->gl_ctx ); | ||||
| @@ -480,15 +410,15 @@ void SVGAMesaDestroyContext( SVGAMesaContext ctx ) | ||||
|          SVGAMesa = NULL; | ||||
|       } | ||||
|    } | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Make the specified VGA/Mesa context the current one. | ||||
|  */ | ||||
| void SVGAMesaMakeCurrent( SVGAMesaContext ctx ) | ||||
| { | ||||
| #ifndef DEV | ||||
|    SVGAMesa = ctx; | ||||
|    svgamesa_update_state( ctx->gl_ctx ); | ||||
|    gl_make_current( ctx->gl_ctx, ctx->gl_buffer ); | ||||
| @@ -499,10 +429,9 @@ void SVGAMesaMakeCurrent( SVGAMesaContext ctx ) | ||||
|       ctx->height = vga_getydim(); | ||||
|       gl_Viewport( ctx->gl_ctx, 0, 0, ctx->width, ctx->height ); | ||||
|    } | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Return a handle to the current VGA/Mesa context. | ||||
|  */ | ||||
| @@ -511,20 +440,38 @@ SVGAMesaContext SVGAMesaGetCurrentContext( void ) | ||||
|    return SVGAMesa; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Swap front/back buffers for current context if double buffered. | ||||
|  */ | ||||
| void SVGAMesaSwapBuffers( void ) | ||||
| { | ||||
|  void * tmpptr; | ||||
|   | ||||
| /* vga_waitretrace(); */ | ||||
|  copy_buffer(SVGABuffer.BackBuffer); | ||||
|  | ||||
| #ifndef DEV | ||||
|    FLUSH_VB( SVGAMesa->gl_ctx, "swap buffers" ); | ||||
|    if (SVGAMesa->gl_vis->DBflag) { | ||||
|       vga_flip(); | ||||
|    } | ||||
|    if (SVGAMesa->gl_vis->DBflag)  | ||||
| #endif /* DEV */    | ||||
|    { | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping..."); | ||||
|    SVGAlog(cbuf); | ||||
| #endif /* SVGA_DEBUG */ | ||||
|    tmpptr=SVGABuffer.BackBuffer; | ||||
|    SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer; | ||||
|    SVGABuffer.FrontBuffer=tmpptr; | ||||
| #ifdef SVGA_DEBUG | ||||
|    sprintf(cbuf,"SVGAMesaSwapBuffers : WriteBuffer : %p\n" | ||||
|                 "                      Readbuffer  : %p", \ | ||||
| 		SVGABuffer.BackBuffer, SVGABuffer.FrontBuffer ); | ||||
|    SVGAlog(cbuf); | ||||
| #endif /* SVGA_DEBUG */ | ||||
|    }        | ||||
| } | ||||
|  | ||||
|  | ||||
| #else | ||||
| #else /*SVGA*/ | ||||
|  | ||||
| /* | ||||
|  * Need this to provide at least one external definition when SVGA is | ||||
|   | ||||
							
								
								
									
										185
									
								
								src/mesa/drivers/svga/svgamesa15.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								src/mesa/drivers/svga/svgamesa15.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| /* $Id: svgamesa15.c,v 1.1.2.4 2000/01/31 22:10:39 tanner Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef SVGA | ||||
|  | ||||
| #include "svgapix.h" | ||||
|  | ||||
| GLshort * shortBuffer; | ||||
|  | ||||
| int __svga_drawpixel15(int x, int y, unsigned long c) | ||||
| { | ||||
|     unsigned long offset; | ||||
|      | ||||
|     shortBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     shortBuffer[offset]=c; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| unsigned long __svga_getpixel15(int x, int y) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     shortBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     return shortBuffer[offset]; | ||||
| } | ||||
|  | ||||
| void __set_color15( GLcontext *ctx, | ||||
|                     GLubyte red, GLubyte green, | ||||
|                     GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->hicolor=(red>>3)<<10 | (green>>3)<<5 | (blue>>3);  | ||||
| /*   SVGAMesa->hicolor=(red)<<10 | (green)<<5 | (blue); */ | ||||
| }    | ||||
|  | ||||
| void __clear_color15( GLcontext *ctx, | ||||
|                       GLubyte red, GLubyte green, | ||||
|                       GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->clear_hicolor=(red>>3)<<10 | (green>>3)<<5 | (blue>>3);   | ||||
| /*   SVGAMesa->clear_hicolor=(red)<<10 | (green)<<5 | (blue);*/ | ||||
| }    | ||||
|  | ||||
| GLbitfield __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|                       GLint x, GLint y, GLint width, GLint height ) | ||||
| { | ||||
|    int i,j; | ||||
|     | ||||
|    if (mask & GL_COLOR_BUFFER_BIT) { | ||||
|     shortBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     if (all) { | ||||
|      for (i=0;i<SVGABuffer.BufferSize / 2;i++) shortBuffer[i]=SVGAMesa->clear_hicolor; | ||||
|     } else { | ||||
|     for (i=x;i<width;i++)     | ||||
|      for (j=y;j<height;j++)     | ||||
|       __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor); | ||||
|     }	 | ||||
|    }     | ||||
|    return mask & (~GL_COLOR_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
| void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                           const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    if (mask) { | ||||
|       /* draw some pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          if (mask[i]) { | ||||
|          __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \ | ||||
| 			           (rgba[i][GCOMP]>>3)<<5 |  \ | ||||
| 			           (rgba[i][BCOMP]>>3)); | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       /* draw all pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \ | ||||
| 			           (rgba[i][GCOMP]>>3)<<5  | \ | ||||
| 			           (rgba[i][BCOMP]>>3)); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_rgba_span15( const GLcontext *ctx, | ||||
|                                GLuint n, GLint x, GLint y, | ||||
|                                const GLubyte mask[]) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel15( x, y, SVGAMesa->hicolor); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                          GLubyte rgba[][4] ) | ||||
| { | ||||
|    int i,pix; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|     pix = __svga_getpixel15( x, y); | ||||
|     rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff; | ||||
|     rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff; | ||||
|     rgba[i][BCOMP] = ((pix    )<<3) & 0xff; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_rgba_pixels15( const GLcontext *ctx, | ||||
|                             GLuint n, const GLint x[], const GLint y[], | ||||
|                             const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel15( x[i], y[i], (rgba[i][RCOMP]>>3)<<10 | \ | ||||
| 			                 (rgba[i][GCOMP]>>3)<<5  | \ | ||||
| 			                 (rgba[i][BCOMP]>>3)); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| void __write_mono_rgba_pixels15( const GLcontext *ctx, | ||||
|                                  GLuint n, | ||||
|                                  const GLint x[], const GLint y[], | ||||
|                                  const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    /* use current rgb color */ | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel15( x[i], y[i], SVGAMesa->hicolor ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_pixels15( const GLcontext *ctx, | ||||
|                            GLuint n, const GLint x[], const GLint y[], | ||||
|                            GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i,pix; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|     pix = __svga_getpixel15( x[i], y[i] ); | ||||
|     rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff; | ||||
|     rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff; | ||||
|     rgba[i][BCOMP] = ((pix    )<<3) & 0xff; | ||||
|    } | ||||
| } | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										44
									
								
								src/mesa/drivers/svga/svgamesa15.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/mesa/drivers/svga/svgamesa15.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| /* $Id: svgamesa15.h,v 1.1.2.2 2000/01/22 20:05:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef SVGA_MESA_15_H | ||||
| #define SVGA_MESA_15_H | ||||
|  | ||||
| extern void __set_color15( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern void __clear_color15( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern GLbitfield __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | ||||
| extern void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]); | ||||
| extern void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); | ||||
| extern void __write_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | ||||
| extern void __read_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); | ||||
|  | ||||
| #endif /* SVGA_MESA_15_H */ | ||||
							
								
								
									
										185
									
								
								src/mesa/drivers/svga/svgamesa16.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								src/mesa/drivers/svga/svgamesa16.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| /* $Id: svgamesa16.c,v 1.1.2.4 2000/01/31 22:10:39 tanner Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef SVGA | ||||
|  | ||||
| #include "svgapix.h" | ||||
|  | ||||
| GLshort * shortBuffer; | ||||
|  | ||||
| int __svga_drawpixel16(int x, int y, unsigned long c) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     shortBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     shortBuffer[offset]=c; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| unsigned long __svga_getpixel16(int x, int y) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     shortBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     return shortBuffer[offset]; | ||||
| } | ||||
|  | ||||
| void __set_color16( GLcontext *ctx, | ||||
|                     GLubyte red, GLubyte green, | ||||
|                     GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|     SVGAMesa->hicolor=(red>>3)<<11 | (green>>2)<<5 | (blue>>3);  | ||||
| /*    SVGAMesa->hicolor=(red)<<11 | (green)<<5 | (blue); */ | ||||
| }    | ||||
|  | ||||
| void __clear_color16( GLcontext *ctx, | ||||
|                       GLubyte red, GLubyte green, | ||||
|                       GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|     SVGAMesa->clear_hicolor=(red>>3)<<11 | (green>>2)<<5 | (blue>>3);  | ||||
| /*    SVGAMesa->clear_hicolor=(red)<<11 | (green)<<5 | (blue); */ | ||||
| }    | ||||
|  | ||||
| GLbitfield __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|                       GLint x, GLint y, GLint width, GLint height ) | ||||
| { | ||||
|    int i,j; | ||||
|     | ||||
|    if (mask & GL_COLOR_BUFFER_BIT) { | ||||
|     if (all) { | ||||
|      shortBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|      for (i=0;i<SVGABuffer.BufferSize / 2;i++) shortBuffer[i]=SVGAMesa->clear_hicolor; | ||||
|     } else { | ||||
|     for (i=x;i<width;i++)     | ||||
|      for (j=y;j<height;j++)     | ||||
|       __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor); | ||||
|     }	 | ||||
|    }         | ||||
|    return mask & (~GL_COLOR_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
| void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                           const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    if (mask) { | ||||
|       /* draw some pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          if (mask[i]) { | ||||
|          __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \ | ||||
| 			           (rgba[i][GCOMP]>>2)<<5  | \ | ||||
| 			           (rgba[i][BCOMP]>>3)); | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       /* draw all pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \ | ||||
| 			           (rgba[i][GCOMP]>>2)<<5  | \ | ||||
| 			           (rgba[i][BCOMP]>>3)); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_rgba_span16( const GLcontext *ctx, | ||||
|                                GLuint n, GLint x, GLint y, | ||||
|                                const GLubyte mask[]) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel16( x, y, SVGAMesa->hicolor); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                          GLubyte rgba[][4] ) | ||||
| { | ||||
|    int i,pix; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|     pix = __svga_getpixel16( x, y ); | ||||
|     rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff; | ||||
|     rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff; | ||||
|     rgba[i][BCOMP] = ((pix    )<<3) & 0xff; | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_rgba_pixels16( const GLcontext *ctx, | ||||
|                             GLuint n, const GLint x[], const GLint y[], | ||||
|                             const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel16( x[i], y[i], (rgba[i][RCOMP]>>3)<<11 | \ | ||||
| 			                 (rgba[i][GCOMP]>>2)<<5  | \ | ||||
| 			                 (rgba[i][BCOMP]>>3)); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| void __write_mono_rgba_pixels16( const GLcontext *ctx, | ||||
|                                  GLuint n, | ||||
|                                  const GLint x[], const GLint y[], | ||||
|                                  const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    /* use current rgb color */ | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel16( x[i], y[i], SVGAMesa->hicolor ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_pixels16( const GLcontext *ctx, | ||||
|                            GLuint n, const GLint x[], const GLint y[], | ||||
|                            GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i,pix; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|     pix = __svga_getpixel16( x[i], y[i] ); | ||||
|     rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff; | ||||
|     rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff; | ||||
|     rgba[i][BCOMP] = ((pix    )<<3) & 0xff; | ||||
|    } | ||||
| } | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										45
									
								
								src/mesa/drivers/svga/svgamesa16.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/mesa/drivers/svga/svgamesa16.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| /* $Id: svgamesa16.h,v 1.1.2.2 2000/01/22 20:05:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef SVGA_MESA_16_H | ||||
| #define SVGA_MESA_16_H | ||||
|  | ||||
| extern void __set_color16( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern void __clear_color16( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern GLbitfield __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | ||||
| extern void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]); | ||||
| extern void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); | ||||
| extern void __write_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | ||||
| extern void __read_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); | ||||
|  | ||||
| #endif /* SVGA_MESA_16_H */ | ||||
|  | ||||
							
								
								
									
										215
									
								
								src/mesa/drivers/svga/svgamesa24.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								src/mesa/drivers/svga/svgamesa24.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,215 @@ | ||||
| /* $Id: svgamesa24.c,v 1.1.2.5 2000/01/31 22:10:39 tanner Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef SVGA | ||||
|  | ||||
| #include "svgapix.h" | ||||
|  | ||||
| _RGB * rgbBuffer; | ||||
|  | ||||
| #if 0 | ||||
| /* this doesn't compile with GCC on RedHat 6.1 */ | ||||
| inline int RGB2BGR24(int c) | ||||
| { | ||||
| 	asm("rorw  $8, %0\n"	  | ||||
| 	    "rorl $16, %0\n"	  | ||||
| 	    "rorw  $8, %0\n"	  | ||||
| 	    "shrl  $8, %0\n"	  | ||||
|       : "=q"(c):"0"(c)); | ||||
|     return c; | ||||
| } | ||||
| #else | ||||
| static unsigned long RGB2BGR24(unsigned long color) | ||||
| { | ||||
|    return (color & 0xff00)|(color>>16)|((color & 0xff)<<16); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| int __svga_drawpixel24(int x, int y, GLubyte r, GLubyte g, GLubyte b) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     rgbBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|  | ||||
|     rgbBuffer[offset].r=r; | ||||
|     rgbBuffer[offset].g=g; | ||||
|     rgbBuffer[offset].b=b; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| unsigned long __svga_getpixel24(int x, int y) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     rgbBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     return rgbBuffer[offset].r<<16 | rgbBuffer[offset].g<<8 | rgbBuffer[offset].b; | ||||
| } | ||||
|  | ||||
| void __set_color24( GLcontext *ctx, | ||||
|                     GLubyte red, GLubyte green, | ||||
|                     GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->red = red; | ||||
|    SVGAMesa->green = green; | ||||
|    SVGAMesa->blue = blue; | ||||
| /*   SVGAMesa->truecolor = red<<16 | green<<8 | blue; */ | ||||
| } | ||||
|  | ||||
| void __clear_color24( GLcontext *ctx, | ||||
|                       GLubyte red, GLubyte green, | ||||
|                       GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->clear_red = red; | ||||
|    SVGAMesa->clear_green = green; | ||||
|    SVGAMesa->clear_blue = blue; | ||||
| /*   SVGAMesa->clear_truecolor = red<<16 | green<<8 | blue; */ | ||||
| } | ||||
|  | ||||
| GLbitfield __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|                       GLint x, GLint y, GLint width, GLint height ) | ||||
| { | ||||
|    int i,j; | ||||
|     | ||||
|    if (mask & GL_COLOR_BUFFER_BIT) { | ||||
|     if (all) { | ||||
|      rgbBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|      for (i=0;i<SVGABuffer.BufferSize / 3;i++) | ||||
|       { | ||||
|        rgbBuffer[i].r=SVGAMesa->clear_red; | ||||
|        rgbBuffer[i].g=SVGAMesa->clear_green; | ||||
|        rgbBuffer[i].b=SVGAMesa->clear_blue; | ||||
|       }  | ||||
|     } else { | ||||
|     for (i=x;i<width;i++)     | ||||
|      for (j=y;j<height;j++)     | ||||
|       __svga_drawpixel24( i, j, SVGAMesa->clear_red, | ||||
|                                 SVGAMesa->clear_green, | ||||
| 				SVGAMesa->clear_blue); | ||||
|     }	 | ||||
|    } | ||||
|    return mask & (~GL_COLOR_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
| void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                           const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    if (mask) { | ||||
|       /* draw some pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          if (mask[i]) { | ||||
|          __svga_drawpixel24( x, y, rgba[i][RCOMP], | ||||
| 	                           rgba[i][GCOMP], | ||||
| 				   rgba[i][BCOMP]); | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       /* draw all pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          __svga_drawpixel24( x, y, rgba[i][RCOMP], | ||||
| 	                           rgba[i][GCOMP], | ||||
| 				   rgba[i][BCOMP]); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_rgba_span24( const GLcontext *ctx, | ||||
|                                GLuint n, GLint x, GLint y, | ||||
|                                const GLubyte mask[]) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel24( x, y, SVGAMesa->red, | ||||
|                                    SVGAMesa->green, | ||||
| 				   SVGAMesa->blue); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                          GLubyte rgba[][4] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|     *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x, y)); | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_rgba_pixels24( const GLcontext *ctx, | ||||
|                             GLuint n, const GLint x[], const GLint y[], | ||||
|                             const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel24( x[i], y[i], rgba[i][RCOMP], | ||||
| 	                                 rgba[i][GCOMP], | ||||
| 				         rgba[i][BCOMP]); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_rgba_pixels24( const GLcontext *ctx, | ||||
|                                  GLuint n, | ||||
|                                  const GLint x[], const GLint y[], | ||||
|                                  const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    /* use current rgb color */ | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel24( x[i], y[i], SVGAMesa->red, | ||||
|                                          SVGAMesa->green, | ||||
| 				         SVGAMesa->blue); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_pixels24( const GLcontext *ctx, | ||||
|                            GLuint n, const GLint x[], const GLint y[], | ||||
|                            GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|     *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x[i], y[i]));     | ||||
|    } | ||||
| } | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										45
									
								
								src/mesa/drivers/svga/svgamesa24.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/mesa/drivers/svga/svgamesa24.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| /* $Id: svgamesa24.h,v 1.1.2.2 2000/01/22 20:05:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef SVGA_MESA_24_H | ||||
| #define SVGA_MESA_24_H | ||||
|  | ||||
| extern void __set_color24( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern void __clear_color24( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern GLbitfield __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | ||||
| extern void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]); | ||||
| extern void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); | ||||
| extern void __write_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | ||||
| extern void __read_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); | ||||
|  | ||||
| #endif /* SVGA_MESA_24_H */ | ||||
|  | ||||
							
								
								
									
										192
									
								
								src/mesa/drivers/svga/svgamesa32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								src/mesa/drivers/svga/svgamesa32.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,192 @@ | ||||
| /* $Id: svgamesa32.c,v 1.1.2.5 2000/01/31 22:10:39 tanner Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef SVGA | ||||
|  | ||||
| #include "svgapix.h" | ||||
|  | ||||
| GLint * intBuffer; | ||||
|  | ||||
| #if 0 | ||||
| /* this doesn't compile with GCC on RedHat 6.1 */ | ||||
| inline int RGB2BGR32(int c) | ||||
| { | ||||
| 	asm("rorw  $8, %0\n"	  | ||||
| 	    "rorl $16, %0\n"	  | ||||
| 	    "rorw  $8, %0\n"	  | ||||
| 	    "shrl  $8, %0\n"	  | ||||
|       : "=q"(c):"0"(c)); | ||||
|     return c; | ||||
| } | ||||
| #else | ||||
| static unsigned long RGB2BGR32(unsigned long color) | ||||
| { | ||||
|    return (color & 0xff00)|(color>>16)|((color & 0xff)<<16); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| int __svga_drawpixel32(int x, int y, unsigned long c) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     intBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     intBuffer[offset]=c; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| unsigned long __svga_getpixel32(int x, int y) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     intBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->width + x; | ||||
|     return intBuffer[offset]; | ||||
| } | ||||
|  | ||||
| void __set_color32( GLcontext *ctx, | ||||
|                     GLubyte red, GLubyte green, | ||||
|                     GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->red = red; | ||||
|    SVGAMesa->green = green; | ||||
|    SVGAMesa->blue = blue; | ||||
|    SVGAMesa->truecolor = red<<16 | green<<8 | blue; | ||||
| } | ||||
|  | ||||
| void __clear_color32( GLcontext *ctx, | ||||
|                       GLubyte red, GLubyte green, | ||||
|                       GLubyte blue, GLubyte alpha ) | ||||
| { | ||||
|    SVGAMesa->clear_truecolor = red<<16 | green<<8 | blue; | ||||
| } | ||||
|  | ||||
| GLbitfield __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|                         GLint x, GLint y, GLint width, GLint height ) | ||||
| { | ||||
|    int i,j; | ||||
|     | ||||
|    if (mask & GL_COLOR_BUFFER_BIT) { | ||||
|     if (all) { | ||||
|      intBuffer=(void *)SVGABuffer.BackBuffer; | ||||
|      for (i=0;i<SVGABuffer.BufferSize / 4;i++) intBuffer[i]=SVGAMesa->clear_truecolor; | ||||
|     } else { | ||||
|     for (i=x;i<width;i++)     | ||||
|      for (j=y;j<height;j++)     | ||||
|       __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor); | ||||
|     }	 | ||||
|    } | ||||
|    return mask & (~GL_COLOR_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
| void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                           const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    if (mask) { | ||||
|       /* draw some pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          if (mask[i]) { | ||||
|          __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i]))); | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       /* draw all pixels */ | ||||
|       for (i=0; i<n; i++, x++) { | ||||
|          __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i]))); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_rgba_span32( const GLcontext *ctx, | ||||
|                                GLuint n, GLint x, GLint y, | ||||
|                                const GLubyte mask[]) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel32( x, y, SVGAMesa->truecolor); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                          GLubyte rgba[][4] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++, x++) { | ||||
|      *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x, y )); | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_rgba_pixels32( const GLcontext *ctx, | ||||
|                             GLuint n, const GLint x[], const GLint y[], | ||||
|                             const GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel32( x[i], y[i], RGB2BGR32(*((GLint*)rgba[i]))); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_rgba_pixels32( const GLcontext *ctx, | ||||
|                                  GLuint n, | ||||
|                                  const GLint x[], const GLint y[], | ||||
|                                  const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    /* use current rgb color */ | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel32( x[i], y[i], SVGAMesa->truecolor ); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_rgba_pixels32( const GLcontext *ctx, | ||||
|                            GLuint n, const GLint x[], const GLint y[], | ||||
|                            GLubyte rgba[][4], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|     *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x[i], y[i] )); | ||||
|    } | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										45
									
								
								src/mesa/drivers/svga/svgamesa32.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/mesa/drivers/svga/svgamesa32.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| /* $Id: svgamesa32.h,v 1.1.2.2 2000/01/22 20:05:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef SVGA_MESA_32_H | ||||
| #define SVGA_MESA_32_H | ||||
|  | ||||
| extern void __set_color32( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern void __clear_color32( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); | ||||
| extern GLbitfield __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | ||||
| extern void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]); | ||||
| extern void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); | ||||
| extern void __write_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); | ||||
| extern void __write_mono_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | ||||
| extern void __read_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); | ||||
|  | ||||
| #endif /* SVGA_MESA_32_H */ | ||||
|  | ||||
							
								
								
									
										167
									
								
								src/mesa/drivers/svga/svgamesa8.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								src/mesa/drivers/svga/svgamesa8.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| /* $Id: svgamesa8.c,v 1.1.2.3 2000/01/31 22:10:39 tanner Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef SVGA | ||||
|  | ||||
|  | ||||
| #include "svgapix.h" | ||||
|  | ||||
| int __svga_drawpixel8(int x, int y, unsigned long c) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->linewidth + x; | ||||
|     SVGABuffer.BackBuffer[offset]=c; | ||||
|      | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| unsigned long __svga_getpixel8(int x, int y) | ||||
| { | ||||
|     unsigned long offset; | ||||
|  | ||||
|     y = SVGAInfo->height-y-1; | ||||
|     offset = y * SVGAInfo->linewidth + x; | ||||
|     return SVGABuffer.BackBuffer[offset]; | ||||
| } | ||||
|  | ||||
| void __set_index8( GLcontext *ctx, GLuint index ) | ||||
| { | ||||
|    SVGAMesa->index = index; | ||||
| } | ||||
|  | ||||
| void __clear_index8( GLcontext *ctx, GLuint index ) | ||||
| { | ||||
|    SVGAMesa->clear_index = index; | ||||
| } | ||||
|  | ||||
| GLbitfield __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all, | ||||
|                      GLint x, GLint y, GLint width, GLint height ) | ||||
| { | ||||
|    int i,j; | ||||
|     | ||||
|    if (mask & GL_COLOR_BUFFER_BIT) { | ||||
|     | ||||
|     if (all)  | ||||
|     {  | ||||
|      memset(SVGABuffer.BackBuffer,SVGAMesa->clear_index,SVGABuffer.BufferSize); | ||||
|     } else { | ||||
|     for (i=x;i<width;i++)     | ||||
|      for (j=y;j<height;j++)     | ||||
|       __svga_drawpixel8(i,j,SVGAMesa->clear_index); | ||||
|     } | ||||
|    }     | ||||
|    return mask & (~GL_COLOR_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
| void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                          const GLuint index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0;i<n;i++,x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel8( x, y, index[i]); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_ci8_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, | ||||
|                         const GLubyte index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|  | ||||
|    for (i=0;i<n;i++,x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel8( x, y, index[i]); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_mono_ci_span8( const GLcontext *ctx, GLuint n, | ||||
|                             GLint x, GLint y, const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0;i<n;i++,x++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel8( x, y, SVGAMesa->index); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_ci32_span8( const GLcontext *ctx, | ||||
|                         GLuint n, GLint x, GLint y, GLuint index[]) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|       index[i] = __svga_getpixel8( x, y); | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __write_ci32_pixels8( const GLcontext *ctx, | ||||
|                            GLuint n, const GLint x[], const GLint y[], | ||||
|                            const GLuint index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel8( x[i], y[i], index[i]); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| void __write_mono_ci_pixels8( const GLcontext *ctx, GLuint n, | ||||
|                               const GLint x[], const GLint y[], | ||||
|                               const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++) { | ||||
|       if (mask[i]) { | ||||
|          __svga_drawpixel8( x[i], y[i], SVGAMesa->index); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| void __read_ci32_pixels8( const GLcontext *ctx, | ||||
|                           GLuint n, const GLint x[], const GLint y[], | ||||
|                           GLuint index[], const GLubyte mask[] ) | ||||
| { | ||||
|    int i; | ||||
|    for (i=0; i<n; i++,x++) { | ||||
|       index[i] = __svga_getpixel8( x[i], y[i]); | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										45
									
								
								src/mesa/drivers/svga/svgamesa8.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/mesa/drivers/svga/svgamesa8.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| /* $Id: svgamesa8.h,v 1.1.2.1 2000/01/22 20:05:09 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef SVGA_MESA_8_H | ||||
| #define SVGA_MESA_8_H | ||||
|  | ||||
| extern void __set_index8( GLcontext *ctx, GLuint index ); | ||||
| extern void __clear_index8( GLcontext *ctx, GLuint index ); | ||||
| extern GLbitfield __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | ||||
| extern void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLuint index[], const GLubyte mask[] ); | ||||
| extern void __write_ci8_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte index[], const GLubyte mask[] ); | ||||
| extern void __write_mono_ci_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] ); | ||||
| extern void __read_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLuint index[]); | ||||
| extern void __write_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLuint index[], const GLubyte mask[] ); | ||||
| extern void __write_mono_ci_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | ||||
| extern void __read_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLuint index[], const GLubyte mask[] ); | ||||
|  | ||||
| #endif /* SVGA_MESA_15_H */ | ||||
							
								
								
									
										71
									
								
								src/mesa/drivers/svga/svgapix.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/mesa/drivers/svga/svgapix.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| /* $Id: svgapix.h,v 1.1.2.2 2000/01/22 20:05:28 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.2 | ||||
|  * Copyright (C) 1995-2000  Brian Paul | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with this library; if not, write to the Free | ||||
|  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * SVGA driver for Mesa. | ||||
|  * Original author:  Brian Paul | ||||
|  * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2) | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef SVGAPIX_H | ||||
| #define SVGAPIX_H | ||||
|  | ||||
| #include "GL/gl.h" | ||||
| #include "GL/svgamesa.h" | ||||
| #include "context.h" | ||||
| #include "vga.h" | ||||
|  | ||||
| struct svgamesa_context { | ||||
|    GLcontext *gl_ctx;		/* the core Mesa context */ | ||||
|    GLvisual *gl_vis;		/* describes the color buffer */ | ||||
|    GLframebuffer *gl_buffer;	/* the ancillary buffers */ | ||||
|    GLuint index;		/* current color index */ | ||||
|    GLuint clear_index;		/* current clear index */ | ||||
|    GLint red, green, blue;	/* current rgb color */ | ||||
|    GLuint truecolor;		/* current rgb color */ | ||||
|    GLint clear_red,  | ||||
|          clear_green,  | ||||
| 	 clear_blue;		/* current clear rgb color */ | ||||
|    GLuint clear_truecolor;	/* current clear rgb color */ | ||||
|    GLushort hicolor;		/* current hicolor */ | ||||
|    GLushort clear_hicolor;	/* current clear hicolor */ | ||||
|    GLint width, height;		/* size of color buffer */ | ||||
|    GLint depth;			/* bits per pixel (8,16,24 or 32) */ | ||||
| }; | ||||
|  | ||||
| typedef struct { GLubyte b,g,r; } _RGB; | ||||
|  | ||||
| struct svga_buffer {    | ||||
|    GLint     Depth; | ||||
|    GLint     BufferSize; | ||||
|    GLubyte   * FrontBuffer; | ||||
|    GLubyte   * BackBuffer; | ||||
|    GLubyte   * VideoRam; | ||||
| }; | ||||
|  | ||||
| extern struct svga_buffer SVGABuffer; | ||||
| extern vga_modeinfo * SVGAInfo; | ||||
| extern SVGAMesaContext SVGAMesa;    /* the current context */ | ||||
|  | ||||
| #endif /* SVGAPIX_H */ | ||||
| @@ -1,10 +1,10 @@ | ||||
| /* $Id: fakeglx.c,v 1.13 1999/11/11 01:29:28 brianp Exp $ */ | ||||
| /* $Id: fakeglx.c,v 1.12.2.10 2000/07/19 15:15:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
|  * Version:  3.1 | ||||
|  * Version:  3.2.1 | ||||
|  *  | ||||
|  * Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
|  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved. | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
| @@ -45,7 +45,16 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
| #include "glxheader.h" | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "conf.h" | ||||
| #endif | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <X11/Xlib.h> | ||||
| #include <X11/Xutil.h> | ||||
| #include "GL/gl.h" | ||||
| #include "GL/xmesa.h" | ||||
| #include "context.h" | ||||
| #include "config.h" | ||||
| @@ -258,7 +267,7 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo, | ||||
|           && (v->gl_visual->StencilBits >= stencil_size || stencil_size == 0) | ||||
|           && (v->gl_visual->AccumBits >= accum_size || accum_size == 0)) { | ||||
|          /* now either compare XVisualInfo pointers or visual IDs */ | ||||
|          if ((!comparePointers && v->vishandle->visualid == vinfo->visualid) | ||||
|          if ((!comparePointers && v->visinfo->visualid == vinfo->visualid) | ||||
|              || (comparePointers && v->vishandle == vinfo)) { | ||||
|             return v; | ||||
|          } | ||||
| @@ -1047,7 +1056,6 @@ Bool Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) | ||||
| { | ||||
|    if (ctx && drawable) { | ||||
|       XMesaBuffer buffer; | ||||
|       XMesaContext xmctx = (XMesaContext) ctx; | ||||
|  | ||||
|       if (drawable==MakeCurrent_PrevDrawable && ctx==MakeCurrent_PrevContext) { | ||||
|          buffer = MakeCurrent_PrevBuffer; | ||||
| @@ -1057,7 +1065,7 @@ Bool Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) | ||||
|       } | ||||
|       if (!buffer) { | ||||
|          /* drawable must be a new window! */ | ||||
|          buffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, drawable, ctx ); | ||||
|          buffer = XMesaCreateWindowBuffer2( ctx->xm_visual, drawable, ctx ); | ||||
|          if (!buffer) { | ||||
|             /* Out of memory, or context/drawable depth mismatch */ | ||||
|             return False; | ||||
| @@ -1149,12 +1157,12 @@ void Fake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ) | ||||
|  | ||||
|  | ||||
| void Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, | ||||
|                           GLuint mask ) | ||||
|                           unsigned long mask ) | ||||
| { | ||||
|    XMesaContext xm_src = (XMesaContext) src; | ||||
|    XMesaContext xm_dst = (XMesaContext) dst; | ||||
|    (void) dpy; | ||||
|    gl_copy_context( xm_src->gl_ctx, xm_dst->gl_ctx, mask ); | ||||
|    gl_copy_context( xm_src->gl_ctx, xm_dst->gl_ctx, (GLuint) mask ); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -1422,10 +1430,10 @@ static const char *get_extensions( void ) | ||||
| #ifdef FX | ||||
|    const char *fx = getenv("MESA_GLX_FX"); | ||||
|    if (fx && fx[0] != 'd') { | ||||
|       return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_EXT_get_proc_address GLX_MESA_set_3dfx_mode"; | ||||
|       return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_MESA_set_3dfx_mode GLX_ARB_get_proc_address"; | ||||
|    } | ||||
| #endif | ||||
|    return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GL_EXT_get_proc_address"; | ||||
|    return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_ARB_get_proc_address"; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -1444,7 +1452,7 @@ const char *Fake_glXQueryExtensionsString( Display *dpy, int screen ) | ||||
| const char *Fake_glXQueryServerString( Display *dpy, int screen, int name ) | ||||
| { | ||||
|    static char *vendor = "Brian Paul"; | ||||
|    static char *version = "1.1 Mesa 3.1"; | ||||
|    static char *version = "1.1 Mesa 3.2.1"; | ||||
|  | ||||
|    (void) dpy; | ||||
|    (void) screen; | ||||
| @@ -1467,7 +1475,7 @@ const char *Fake_glXQueryServerString( Display *dpy, int screen, int name ) | ||||
| const char *Fake_glXGetClientString( Display *dpy, int name ) | ||||
| { | ||||
|    static char *vendor = "Brian Paul"; | ||||
|    static char *version = "1.1 Mesa 3.1"; | ||||
|    static char *version = "1.1 Mesa 3.2.1"; | ||||
|  | ||||
|    (void) dpy; | ||||
|  | ||||
| @@ -1510,37 +1518,62 @@ GLboolean Fake_glXSet3DfxModeMESA( GLint mode ) | ||||
|  | ||||
|  | ||||
|  | ||||
| #if 0 | ||||
| /*GLfunction Fake_glXGetProcAddress( const GLubyte *procName )*/ | ||||
| void (*Fake_glXGetProcAddress( const GLubyte *procName ))() | ||||
| { | ||||
|    typedef void (*GLfunction)(); | ||||
|    typedef void (*gl_function)(); | ||||
|    struct proc { | ||||
|       const char *name; | ||||
|       GLfunction address; | ||||
|       gl_function address; | ||||
|    }; | ||||
|    static struct proc procTable[] = { | ||||
|       { "glXGetProcAddressEXT", (GLfunction) glXGetProcAddressEXT }, | ||||
|       { "glXCreateGLXPixmapMESA", (GLfunction) glXCreateGLXPixmapMESA }, | ||||
|       { "glXReleaseBuffersMESA", (GLfunction) glXReleaseBuffersMESA }, | ||||
|       { "glXCopySubBufferMESA", (GLfunction) glXCopySubBufferMESA }, | ||||
|       { "glXSet3DfxModeMESA", (GLfunction) glXSet3DfxModeMESA }, | ||||
|       /* NOTE: GLX_SGI_video_sync not implemented in Mesa */ | ||||
|       /* GLX 1.0 functions */ | ||||
|       { "glXChooseVisual", (gl_function) glXChooseVisual }, | ||||
|       { "glXCopyContext", (gl_function) glXCopyContext }, | ||||
|       { "glXCreateContext", (gl_function) glXCreateContext }, | ||||
|       { "glXCreateGLXPixmap", (gl_function) glXCreateGLXPixmap }, | ||||
|       { "glXDestroyContext", (gl_function) glXDestroyContext }, | ||||
|       { "glXDestroyGLXPixmap", (gl_function) glXDestroyGLXPixmap }, | ||||
|       { "glXGetConfig", (gl_function) glXGetConfig }, | ||||
|       { "glXGetCurrentContext", (gl_function) glXGetCurrentContext }, | ||||
|       { "glXGetCurrentDrawable", (gl_function) glXGetCurrentDrawable }, | ||||
|       { "glXIsDirect", (gl_function) glXIsDirect }, | ||||
|       { "glXMakeCurrent", (gl_function) glXMakeCurrent }, | ||||
|       { "glXQueryExtension", (gl_function) glXQueryExtension }, | ||||
|       { "glXQueryVersion", (gl_function) glXQueryVersion }, | ||||
|       { "glXSwapBuffers", (gl_function) glXSwapBuffers }, | ||||
|       { "glXUseXFont", (gl_function) glXUseXFont }, | ||||
|       { "glXWaitGL", (gl_function) glXWaitGL }, | ||||
|       { "glXWaitX", (gl_function) glXWaitX }, | ||||
|  | ||||
|       /* GLX 1.1 functions */ | ||||
|       { "glXGetClientString", (gl_function) glXGetClientString }, | ||||
|       { "glXQueryExtensionsString", (gl_function) glXQueryExtensionsString }, | ||||
|       { "glXQueryServerString", (gl_function) glXQueryServerString }, | ||||
|  | ||||
|       /* Extensions */ | ||||
|       { "glXGetProcAddressARB", (gl_function) glXGetProcAddressARB }, | ||||
|       { "glXCreateGLXPixmapMESA", (gl_function) glXCreateGLXPixmapMESA }, | ||||
|       { "glXReleaseBuffersMESA", (gl_function) glXReleaseBuffersMESA }, | ||||
|       { "glXCopySubBufferMESA", (gl_function) glXCopySubBufferMESA }, | ||||
|       { "glXSet3DfxModeMESA", (gl_function) glXSet3DfxModeMESA }, | ||||
|       { "glXGetVideoSyncSGI", (gl_function) glXGetVideoSyncSGI }, | ||||
|       { "glXWaitVideoSyncSGI", (gl_function) glXWaitVideoSyncSGI }, | ||||
|  | ||||
|       { NULL, NULL }  /* end of list token */ | ||||
|    }; | ||||
|    GLuint i; | ||||
|  | ||||
|    /* First, look for core library functions */ | ||||
|    GLfunction f = (GLfunction) gl_get_proc_address(procName); | ||||
|    gl_function f = (gl_function) gl_get_proc_address(procName); | ||||
|    if (f) | ||||
|       return f; | ||||
|  | ||||
|    /* Second, look for GLX funtion */ | ||||
|    for (i = 0; procTable[i].address; i++) { | ||||
|       if (strcmp((const char *) procName, procTable[i].name) == 0) | ||||
| 	  return (GLfunction) procTable[i].address; | ||||
| 	  return procTable[i].address; | ||||
|    } | ||||
|  | ||||
|    return NULL; | ||||
| } | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: glxapi.c,v 1.4 1999/10/27 09:50:10 brianp Exp $ */ | ||||
| /* $Id: glxapi.c,v 1.4.2.2 2000/02/23 23:06:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
| @@ -126,7 +126,7 @@ void glXDestroyContext( Display *dpy, GLXContext ctx ) | ||||
|  | ||||
|  | ||||
| void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, | ||||
| 		     GLuint mask ) | ||||
| 		     unsigned long mask ) | ||||
| { | ||||
| #ifdef REALGLX | ||||
|    if (display_has_glx(dpy)) | ||||
| @@ -419,8 +419,7 @@ GLboolean glXSet3DfxModeMESA( GLint mode ) | ||||
|  | ||||
|  | ||||
|  | ||||
| #if 0  /* spec for this not finalized yet */ | ||||
| void (*glXGetProcAddressEXT( const GLubyte *procName ))() | ||||
| void (*glXGetProcAddressARB( const GLubyte *procName ))() | ||||
| { | ||||
| #ifdef REALGLX | ||||
|    return NULL; | ||||
| @@ -428,4 +427,4 @@ void (*glXGetProcAddressEXT( const GLubyte *procName ))() | ||||
|    return Fake_glXGetProcAddress( procName ); | ||||
| #endif | ||||
| } | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: realglx.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ | ||||
| /* $Id: realglx.c,v 1.1.1.1.2.1 2000/02/23 23:06:55 brianp Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Mesa 3-D graphics library | ||||
| @@ -89,7 +89,7 @@ void Real_glXDestroyContext( Display *dpy, GLXContext ctx ) | ||||
|  | ||||
|  | ||||
| void Real_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, | ||||
|                           GLuint mask ) | ||||
|                           unsigned long mask ) | ||||
| { | ||||
|    (void) dpy; | ||||
|    (void) src; | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user