Compare commits
	
		
			292 Commits
		
	
	
		
			mesa-23.3.
			...
			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