Compare commits
	
		
			85 Commits
		
	
	
		
			mesa-21.0.
			...
			mesa_3_1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					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 | 
							
								
								
									
										298
									
								
								Makefile.X11
									
									
									
									
									
								
							
							
						
						
									
										298
									
								
								Makefile.X11
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
# $Id: Makefile.X11,v 1.12 1999/11/04 03:57:28 gareth Exp $
 | 
			
		||||
# $Id: Makefile.X11,v 1.12.2.2 1999/12/14 20:54:24 brianp Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  3.1
 | 
			
		||||
@@ -315,102 +315,102 @@ realclean: clean
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DIRECTORY = Mesa-3.1
 | 
			
		||||
LIB_NAME = MesaLib-3.1beta3
 | 
			
		||||
DEMO_NAME = MesaDemos-3.1beta3
 | 
			
		||||
LIB_NAME = MesaLib-3.1
 | 
			
		||||
DEMO_NAME = MesaDemos-3.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)/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)/src/GGI/Makefile.am			\
 | 
			
		||||
	$(DIRECTORY)/src/GGI/Makefile.in			\
 | 
			
		||||
	$(DIRECTORY)/src/GGI/*.[ch]				\
 | 
			
		||||
@@ -430,55 +430,67 @@ 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/*.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					\
 | 
			
		||||
	$(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]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DEMO_FILES =	\
 | 
			
		||||
 
 | 
			
		||||
@@ -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,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,28 +1,35 @@
 | 
			
		||||
 | 
			
		||||
                         Mesa 3.0 Unix/X11 Information
 | 
			
		||||
                         Mesa 3.1 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.1/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.
 | 
			
		||||
@@ -301,4 +308,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.2 1999/12/14 15:12:52 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.5 1999/12/14 07:17:42 brianp Exp $
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Mesa Version History
 | 
			
		||||
@@ -659,3 +659,14 @@ 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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.1 1999/11/24 18:38:52 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * Copyright (C) 1995-1999  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.
 | 
			
		||||
 * Copyright (C) 1999  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 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -739,7 +739,6 @@ GLUTAPI int GLUTAPIENTRY glutGameModeGet(GLenum mode);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: glx.h,v 1.6 1999/11/11 01:27:17 brianp Exp $ */
 | 
			
		||||
/* $Id: glx.h,v 1.5.2.2 1999/12/10 14:55:38 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -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,4 +1,4 @@
 | 
			
		||||
/* $Id: osmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
 | 
			
		||||
/* $Id: osmesa.h,v 1.1.1.1.2.1 1999/11/24 18:39:17 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -27,8 +27,11 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: osmesa.h,v $
 | 
			
		||||
 * Revision 1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Initial revision
 | 
			
		||||
 * Revision 1.1.1.1.2.1  1999/11/24 18:39:17  brianp
 | 
			
		||||
 * bumped version to 3.1
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.4  1999/02/14 03:39:09  brianp
 | 
			
		||||
 * new copyright
 | 
			
		||||
@@ -86,7 +89,7 @@ extern "C" {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define OSMESA_MAJOR_VERSION 3
 | 
			
		||||
#define OSMESA_MINOR_VERSION 0
 | 
			
		||||
#define OSMESA_MINOR_VERSION 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: svgamesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
 | 
			
		||||
/* $Id: svgamesa.h,v 1.1.1.1.2.1 1999/11/24 18:40:45 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.0
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * Copyright (C) 1995-1998  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
@@ -23,8 +23,11 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: svgamesa.h,v $
 | 
			
		||||
 * Revision 1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Initial revision
 | 
			
		||||
 * Revision 1.1.1.1.2.1  1999/11/24 18:40:45  brianp
 | 
			
		||||
 * bumped version to 3.1
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 3.0  1998/02/20 05:07:24  brianp
 | 
			
		||||
 * initial rev
 | 
			
		||||
@@ -65,7 +68,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SVGAMESA_MAJOR_VERSION 3
 | 
			
		||||
#define SVGAMESA_MINOR_VERSION 0
 | 
			
		||||
#define SVGAMESA_MINOR_VERSION 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: xmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
 | 
			
		||||
/* $Id: xmesa.h,v 1.1.1.1.2.2 1999/12/13 21:54:19 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -27,8 +27,14 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: xmesa.h,v $
 | 
			
		||||
 * Revision 1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Initial revision
 | 
			
		||||
 * Revision 1.1.1.1.2.2  1999/12/13 21:54:19  brianp
 | 
			
		||||
 * applied Daryll's patches
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1.2.1  1999/11/24 18:41:37  brianp
 | 
			
		||||
 * bumped version to 3.1
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:40  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.3  1999/02/24 22:43:27  jens
 | 
			
		||||
 * Name changes to get XMesa to compile standalone inside XFree86
 | 
			
		||||
@@ -96,6 +102,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 +115,7 @@ extern struct Library *XLibBase;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define XMESA_MAJOR_VERSION 3
 | 
			
		||||
#define XMESA_MINOR_VERSION 0
 | 
			
		||||
#define XMESA_MINOR_VERSION 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -131,7 +140,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 +198,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 +215,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 +228,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,4 +1,4 @@
 | 
			
		||||
/* $Id: tessdemo.c,v 1.3 1999/11/04 04:00:42 gareth Exp $ */
 | 
			
		||||
/* $Id: tessdemo.c,v 1.3.2.1 1999/11/16 11:09:09 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * A demo of the GLU polygon tesselation functions written by Bogdan Sikorski.
 | 
			
		||||
@@ -14,6 +14,9 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: tessdemo.c,v $
 | 
			
		||||
 * Revision 1.3.2.1  1999/11/16 11:09:09  gareth
 | 
			
		||||
 * Added combine callback.  Converted vertices from ints to floats.
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
@@ -79,20 +82,20 @@ static GLfloat		edge_color[3];
 | 
			
		||||
 | 
			
		||||
static struct
 | 
			
		||||
{
 | 
			
		||||
   GLint	p[MAX_POINTS][2];
 | 
			
		||||
   GLfloat	p[MAX_POINTS][2];
 | 
			
		||||
   GLuint	point_cnt;
 | 
			
		||||
} contours[MAX_CONTOURS];
 | 
			
		||||
 | 
			
		||||
static struct
 | 
			
		||||
{
 | 
			
		||||
   GLsizei	no;
 | 
			
		||||
   GLint	p[3][2];
 | 
			
		||||
   GLfloat	p[3][2];
 | 
			
		||||
   GLclampf	color[3][3];
 | 
			
		||||
} triangles[MAX_TRIANGLES];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void GLCALLBACK my_error( GLenum err )
 | 
			
		||||
void GLCALLBACK error_callback( GLenum err )
 | 
			
		||||
{
 | 
			
		||||
   int		len, i;
 | 
			
		||||
   char const	*str;
 | 
			
		||||
@@ -146,22 +149,22 @@ void GLCALLBACK end_callback()
 | 
			
		||||
		 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] );
 | 
			
		||||
      glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] );
 | 
			
		||||
      glVertex2f( 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] );
 | 
			
		||||
      glVertex2f( triangles[i].p[1][0], triangles[i].p[1][1] );
 | 
			
		||||
      glVertex2f( 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] );
 | 
			
		||||
      glVertex2f( triangles[i].p[2][0], triangles[i].p[2][1] );
 | 
			
		||||
      glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   glEnd();
 | 
			
		||||
@@ -170,9 +173,9 @@ void GLCALLBACK end_callback()
 | 
			
		||||
void GLCALLBACK vertex_callback( void *data )
 | 
			
		||||
{
 | 
			
		||||
   GLsizei	no;
 | 
			
		||||
   GLint	*p;
 | 
			
		||||
   GLfloat	*p;
 | 
			
		||||
 | 
			
		||||
   p = (GLint *) data;
 | 
			
		||||
   p = (GLfloat *) data;
 | 
			
		||||
   no = triangles[triangle_cnt].no;
 | 
			
		||||
 | 
			
		||||
   triangles[triangle_cnt].p[no][0] = p[0];
 | 
			
		||||
@@ -190,6 +193,22 @@ void GLCALLBACK vertex_callback( void *data )
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GLCALLBACK combine_callback( GLdouble coords[3],
 | 
			
		||||
				  GLdouble *vertex_data[4],
 | 
			
		||||
				  GLfloat weight[4], void **data )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat	*vertex;
 | 
			
		||||
   int		i;
 | 
			
		||||
 | 
			
		||||
   vertex = (GLfloat *) malloc( 2 * sizeof(GLfloat) );
 | 
			
		||||
 | 
			
		||||
   vertex[0] = (GLfloat) coords[0];
 | 
			
		||||
   vertex[1] = (GLfloat) coords[1];
 | 
			
		||||
 | 
			
		||||
   *data = vertex;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void set_screen_wh( GLsizei w, GLsizei h )
 | 
			
		||||
{
 | 
			
		||||
   width = w;
 | 
			
		||||
@@ -208,10 +227,11 @@ void tesse( void )
 | 
			
		||||
 | 
			
		||||
   if ( tobj != NULL )
 | 
			
		||||
   {
 | 
			
		||||
      gluTessCallback( tobj, GLU_BEGIN, glBegin );
 | 
			
		||||
      gluTessCallback( tobj, GLU_VERTEX, glVertex2iv );
 | 
			
		||||
      gluTessCallback( tobj, GLU_END, glEnd );
 | 
			
		||||
      gluTessCallback( tobj, GLU_ERROR, my_error );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_BEGIN, glBegin );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_VERTEX, glVertex2fv );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_END, glEnd );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_ERROR, error_callback );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_COMBINE, combine_callback );
 | 
			
		||||
 | 
			
		||||
      glNewList( list_start, GL_COMPILE );
 | 
			
		||||
      gluBeginPolygon( tobj );
 | 
			
		||||
@@ -233,10 +253,10 @@ void tesse( void )
 | 
			
		||||
      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 );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_BEGIN, begin_callback );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_VERTEX, vertex_callback );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_END, end_callback );
 | 
			
		||||
      gluTessCallback( tobj, GLU_TESS_EDGE_FLAG, edge_callback );
 | 
			
		||||
 | 
			
		||||
      glNewList( list_start + 1, GL_COMPILE );
 | 
			
		||||
      gluBeginPolygon( tobj );
 | 
			
		||||
@@ -267,7 +287,7 @@ void tesse( void )
 | 
			
		||||
 | 
			
		||||
void left_down( int x1, int y1 )
 | 
			
		||||
{
 | 
			
		||||
   GLint	P[2];
 | 
			
		||||
   GLfloat	P[2];
 | 
			
		||||
   GLuint	point_cnt;
 | 
			
		||||
 | 
			
		||||
   /* translate GLUT into GL coordinates */
 | 
			
		||||
@@ -284,13 +304,13 @@ void left_down( int x1, int y1 )
 | 
			
		||||
 | 
			
		||||
   if ( point_cnt )
 | 
			
		||||
   {
 | 
			
		||||
      glVertex2iv( contours[contour_cnt].p[point_cnt-1] );
 | 
			
		||||
      glVertex2iv( P );
 | 
			
		||||
      glVertex2fv( contours[contour_cnt].p[point_cnt-1] );
 | 
			
		||||
      glVertex2fv( P );
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
   {
 | 
			
		||||
      glVertex2iv( P );
 | 
			
		||||
      glVertex2iv( P );
 | 
			
		||||
      glVertex2fv( P );
 | 
			
		||||
      glVertex2fv( P );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   glEnd();
 | 
			
		||||
@@ -311,8 +331,8 @@ void middle_down( int x1, int y1 )
 | 
			
		||||
   {
 | 
			
		||||
      glBegin( GL_LINES );
 | 
			
		||||
 | 
			
		||||
      glVertex2iv( contours[contour_cnt].p[0] );
 | 
			
		||||
      glVertex2iv( contours[contour_cnt].p[point_cnt-1] );
 | 
			
		||||
      glVertex2fv( contours[contour_cnt].p[0] );
 | 
			
		||||
      glVertex2fv( contours[contour_cnt].p[point_cnt-1] );
 | 
			
		||||
 | 
			
		||||
      contours[contour_cnt].p[point_cnt][0] = -1;
 | 
			
		||||
 | 
			
		||||
@@ -383,24 +403,24 @@ void display( void )
 | 
			
		||||
	 case 0:
 | 
			
		||||
	    break;
 | 
			
		||||
	 case 1:
 | 
			
		||||
	    glVertex2iv( contours[i].p[0] );
 | 
			
		||||
	    glVertex2iv( contours[i].p[0] );
 | 
			
		||||
	    glVertex2fv( contours[i].p[0] );
 | 
			
		||||
	    glVertex2fv( contours[i].p[0] );
 | 
			
		||||
	    break;
 | 
			
		||||
	 case 2:
 | 
			
		||||
	    glVertex2iv( contours[i].p[0] );
 | 
			
		||||
	    glVertex2iv( contours[i].p[1] );
 | 
			
		||||
	    glVertex2fv( contours[i].p[0] );
 | 
			
		||||
	    glVertex2fv( 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] );
 | 
			
		||||
	       glVertex2fv( contours[i].p[j] );
 | 
			
		||||
	       glVertex2fv( contours[i].p[j+1] );
 | 
			
		||||
	    }
 | 
			
		||||
	    if ( contours[i].p[j+1][0] == -1 )
 | 
			
		||||
	    {
 | 
			
		||||
	       glVertex2iv( contours[i].p[0] );
 | 
			
		||||
	       glVertex2iv( contours[i].p[j] );
 | 
			
		||||
	       glVertex2fv( contours[i].p[0] );
 | 
			
		||||
	       glVertex2fv( contours[i].p[j] );
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	 }
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1073
									
								
								progs/xdemos/glxdpyinfo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1073
									
								
								progs/xdemos/glxdpyinfo.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -30,7 +30,7 @@ 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
 | 
			
		||||
	tess_winding.c tess_clip.c
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(SOURCES:.c=.o)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,12 @@
 | 
			
		||||
# 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 $
 | 
			
		||||
# $Id: Makefile.BeOS-R4,v 1.5.2.1 1999/11/15 21:15:43 gareth Exp $
 | 
			
		||||
 | 
			
		||||
# $Log: Makefile.BeOS-R4,v $
 | 
			
		||||
# Revision 1.5.2.1  1999/11/15 21:15:43  gareth
 | 
			
		||||
# Added new tessellation polygon clipping file tess_clip.c
 | 
			
		||||
#
 | 
			
		||||
# Revision 1.5  1999/10/03 00:53:38  gareth
 | 
			
		||||
# Added tessellation winding rule files.
 | 
			
		||||
#
 | 
			
		||||
@@ -59,7 +62,7 @@ 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
 | 
			
		||||
	tess_winding.c tess_clip.c
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(SOURCES:.c=.o)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
# $Id: Makefile.X11,v 1.6 1999/10/03 00:53:38 gareth Exp $
 | 
			
		||||
# $Id: Makefile.X11,v 1.6.2.1 1999/11/15 21:15:43 gareth Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  3.1
 | 
			
		||||
@@ -20,7 +20,7 @@ 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
 | 
			
		||||
	tess_winding.c tess_clip.c
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(SOURCES:.c=.o)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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,4 +1,4 @@
 | 
			
		||||
/* $Id: glu.c,v 1.16 1999/10/27 09:47:41 brianp Exp $ */
 | 
			
		||||
/* $Id: glu.c,v 1.16.2.2 1999/11/22 22:18:13 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -23,6 +23,12 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: glu.c,v $
 | 
			
		||||
 * Revision 1.16.2.2  1999/11/22 22:18:13  brianp
 | 
			
		||||
 * removed GLU_EXT_get_proc_address from ext string
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.16.2.1  1999/11/19 21:22:07  brianp
 | 
			
		||||
 * replace encounteed with encountered
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.16  1999/10/27 09:47:41  brianp
 | 
			
		||||
 * disabled gluGetProcAddressEXT
 | 
			
		||||
 *
 | 
			
		||||
@@ -304,7 +310,7 @@ 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"
 | 
			
		||||
@@ -367,7 +373,7 @@ const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode )
 | 
			
		||||
 | 
			
		||||
const GLubyte* GLAPIENTRY gluGetString( GLenum name )
 | 
			
		||||
{
 | 
			
		||||
   static char *extensions = "GL_EXT_abgr GLU_EXT_get_proc_address";
 | 
			
		||||
   static char *extensions = "GL_EXT_abgr";
 | 
			
		||||
   static char *version = "1.2 Mesa 3.1";
 | 
			
		||||
 | 
			
		||||
   switch (name) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: gluP.h,v 1.1 1999/08/19 00:55:42 jtg Exp $ */
 | 
			
		||||
/* $Id: gluP.h,v 1.1.1.1.2.1 1999/12/06 05:24:36 joukj Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -23,8 +23,19 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: gluP.h,v $
 | 
			
		||||
 * Revision 1.1  1999/08/19 00:55:42  jtg
 | 
			
		||||
 * Initial revision
 | 
			
		||||
 * Revision 1.1.1.1.2.1  1999/12/06 05:24:36  joukj
 | 
			
		||||
 *
 | 
			
		||||
 *  Committing in .
 | 
			
		||||
 *
 | 
			
		||||
 *  Updating compilation on VMS
 | 
			
		||||
 *
 | 
			
		||||
 *  Modified Files:
 | 
			
		||||
 *   Tag: mesa_3_2_dev
 | 
			
		||||
 *  	Mesa/src-glu/descrip.mms Mesa/src-glu/gluP.h
 | 
			
		||||
 *  ----------------------------------------------------------------------
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.1.1.1  1999/08/19 00:55:42  jtg
 | 
			
		||||
 * Imported sources
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.4  1999/01/03 03:23:15  brianp
 | 
			
		||||
 * now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump)
 | 
			
		||||
@@ -55,6 +66,7 @@
 | 
			
		||||
#include "GL/gl.h"
 | 
			
		||||
#include "GL/glu.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#ifndef MESA
 | 
			
		||||
   /* If we're using the real OpenGL header files... */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: mipmap.c,v 1.3 1999/11/09 06:16:59 brianp Exp $ */
 | 
			
		||||
/* $Id: mipmap.c,v 1.3.2.1 1999/12/12 17:23:33 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -23,6 +23,9 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * $Log: mipmap.c,v $
 | 
			
		||||
 * Revision 1.3.2.1  1999/12/12 17:23:33  brianp
 | 
			
		||||
 * removed unneeded code in gluBuild1DMipmaps()
 | 
			
		||||
 *
 | 
			
		||||
 * Revision 1.3  1999/11/09 06:16:59  brianp
 | 
			
		||||
 * replace GLint with GLsizei in a gluScaleImage, gluBuild1/2DMipmaps()
 | 
			
		||||
 *
 | 
			
		||||
@@ -702,12 +705,6 @@ GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
 | 
			
		||||
 | 
			
		||||
   free( texture );
 | 
			
		||||
 | 
			
		||||
   /* make sure remaining mipmap levels are removed */
 | 
			
		||||
   for (l=levels;l<max_levels;l++) {
 | 
			
		||||
      glTexImage1D( GL_TEXTURE_1D, l, components, 0, 0,
 | 
			
		||||
		    format, GL_UNSIGNED_BYTE, NULL );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1018
									
								
								src/glu/mesa/tess.c
									
									
									
									
									
								
							
							
						
						
									
										1018
									
								
								src/glu/mesa/tess.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tess.h,v 1.15 1999/11/05 20:37:14 gareth Exp $ */
 | 
			
		||||
/* $Id: tess.h,v 1.15.2.6 1999/12/05 17:01:17 gareth Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -56,33 +56,39 @@ extern "C" {
 | 
			
		||||
struct GLUtesselator
 | 
			
		||||
{
 | 
			
		||||
    tess_callbacks_t	callbacks;
 | 
			
		||||
    GLboolean		boundary_only;
 | 
			
		||||
    GLenum		winding_rule;
 | 
			
		||||
    GLboolean		boundary_only;
 | 
			
		||||
    GLdouble		tolerance;
 | 
			
		||||
    tess_plane_t	plane;
 | 
			
		||||
    GLuint		contour_count;
 | 
			
		||||
    GLenum		orientation;
 | 
			
		||||
    void		*data;
 | 
			
		||||
    GLint		num_contours;
 | 
			
		||||
    tess_contour_t	*contours, *last_contour;
 | 
			
		||||
    tess_contour_t	*current_contour;
 | 
			
		||||
    GLdouble		mins[2], maxs[2];
 | 
			
		||||
    GLuint		vertex_count;
 | 
			
		||||
    GLint		num_vertices;
 | 
			
		||||
    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;
 | 
			
		||||
    tess_plane_t	plane;
 | 
			
		||||
    GLenum		error;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Tessellation error handler:
 | 
			
		||||
 * Common tessellation functions:
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
extern void tess_error_callback( GLUtesselator *, GLenum );
 | 
			
		||||
 | 
			
		||||
extern GLdouble twice_contour_area( tess_contour_t *contour );
 | 
			
		||||
extern void reverse_contour( tess_contour_t *contour );
 | 
			
		||||
extern void delete_contour( tess_contour_t **contour );
 | 
			
		||||
 | 
			
		||||
extern void contour_dump( tess_contour_t *contour );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Debugging output:
 | 
			
		||||
@@ -115,8 +121,8 @@ extern	int	tess_dbg_level;
 | 
			
		||||
#define MSG		tess_msg
 | 
			
		||||
#endif /* DEBUG */
 | 
			
		||||
 | 
			
		||||
extern INLINE void tess_msg( int level, char *format, ... );
 | 
			
		||||
extern INLINE void tess_info( char *file, char *line );
 | 
			
		||||
extern INLINE void tess_msg( GLint level, char *format, ... );
 | 
			
		||||
extern INLINE void tess_info( char *file, GLint line );
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
# $Id: Makefile.X11,v 1.7 1999/11/11 01:22:28 brianp Exp $
 | 
			
		||||
# $Id: Makefile.X11,v 1.6.2.1 1999/11/16 15:25:50 brianp Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  3.3
 | 
			
		||||
# Version:  3.1
 | 
			
		||||
# Copyright (C) 1995-1999  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 \
 | 
			
		||||
@@ -222,7 +220,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,7 +864,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE&VERBOSE_DRIVER) {
 | 
			
		||||
@@ -928,24 +957,61 @@ 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 */
 | 
			
		||||
#if FXMESA_USE_ARGB 
 | 
			
		||||
   fxInitPixelTables(GL_FALSE); /* Force RGB pixel order */	
 | 
			
		||||
#else
 | 
			
		||||
   if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) {
 | 
			
		||||
      /* jk991130 - GROSS HACK!!! - Voodoo 3s don't use BGR!!
 | 
			
		||||
       * the only way to tell if it's a Voodoo 3 at this stage of the
 | 
			
		||||
       * ballgame (no Glide 3.x for linux *yet*) is to query the # of TMUs
 | 
			
		||||
       * as Voodoo3s have 2 TMUs on board, Banshee has only 1
 | 
			
		||||
       * Thanks to Joseph Kain for that one
 | 
			
		||||
       */
 | 
			
		||||
      if (glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.nTexelfx == 2) {
 | 
			
		||||
         fxInitPixelTables(GL_FALSE); /* use RGB pixel order (Voodoo3) */
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         fxInitPixelTables(GL_TRUE); /* use BGR pixel order on Voodoo1/2 */
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      fxInitPixelTables(GL_FALSE); /* use RGB pixel order otherwise */
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
   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());
 | 
			
		||||
@@ -1204,7 +1270,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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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,44 @@
 | 
			
		||||
#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(GLboolean bgrOrder)
 | 
			
		||||
{
 | 
			
		||||
  GLuint pixel;
 | 
			
		||||
  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 +106,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 +183,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 +199,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 +221,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 +253,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 +267,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 +320,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 +343,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 +354,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
 | 
			
		||||
@@ -298,13 +383,13 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
 | 
			
		||||
 | 
			
		||||
  /* 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 +400,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 +432,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 +542,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 +564,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 +588,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 +629,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 +680,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 +709,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 +719,6 @@ static GLboolean fxIsInHardware(GLcontext *ctx)
 | 
			
		||||
       {
 | 
			
		||||
	  if (MESA_VERBOSE&VERBOSE_DRIVER)
 | 
			
		||||
	    fprintf(stderr, "fxMesa: unsupported multitex env mode\n");
 | 
			
		||||
 | 
			
		||||
	  return GL_FALSE;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
@@ -635,13 +727,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 +774,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 +842,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 +879,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,66 @@
 | 
			
		||||
 | 
			
		||||
#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;
 | 
			
		||||
  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,
 | 
			
		||||
			    src_width, src_height, src_stride, src_data);
 | 
			
		||||
	return GL_TRUE;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } else if (src_height==1) { /* Writing a span */
 | 
			
		||||
    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)+2*(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, src_height,
 | 
			
		||||
			    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 +134,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 +144,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 +156,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 +172,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 +181,9 @@ void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,
 | 
			
		||||
		       src_stride,
 | 
			
		||||
		       (void*)argb);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
#endif /* !defined(FXMESA_USE_RGBA) */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/************************************************************************/
 | 
			
		||||
/*****                    Span functions                            *****/
 | 
			
		||||
@@ -107,12 +196,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 +233,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 +283,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 +300,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 +309,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 +317,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 +329,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 +337,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 +359,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 +367,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 +377,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 +385,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 +395,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                           *****/
 | 
			
		||||
/************************************************************************/
 | 
			
		||||
@@ -341,14 +423,15 @@ void fxDDReadDepthSpanFloat(GLcontext *ctx,
 | 
			
		||||
{
 | 
			
		||||
  fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
 | 
			
		||||
  GLuint i;
 | 
			
		||||
  GLint bottom=fxMesa->height-1;
 | 
			
		||||
  GLint bottom=fxMesa->height+fxMesa->y_offset-1;
 | 
			
		||||
  GLushort data[MAX_WIDTH];
 | 
			
		||||
 | 
			
		||||
  if (MESA_VERBOSE&VERBOSE_DRIVER) {
 | 
			
		||||
     fprintf(stderr,"fxmesa: fxDDReadDepthSpanFloat(...)\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,data);
 | 
			
		||||
  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 +444,14 @@ 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;
 | 
			
		||||
 | 
			
		||||
  if (MESA_VERBOSE&VERBOSE_DRIVER) {
 | 
			
		||||
     fprintf(stderr,"fxmesa: fxDDReadDepthSpanInt(...)\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depth);
 | 
			
		||||
  x+=fxMesa->x_offset;
 | 
			
		||||
  FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depth);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx,
 | 
			
		||||
@@ -380,13 +464,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 +663,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 +675,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 +688,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 +702,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 +719,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 +733,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 +749,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 +763,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 +779,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 +793,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 +809,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 +823,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 +840,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 +854,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 +870,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,7 +1326,7 @@ void fxDDTexSubImg(GLcontext *ctx, GLenum target,
 | 
			
		||||
    fxTexBuildSubImageMap(image,internalFormat,xoffset,yoffset,
 | 
			
		||||
                          width,height,mml->data);
 | 
			
		||||
 | 
			
		||||
  if(ti->validated && ti->tmi.isInTM)
 | 
			
		||||
  if(ti->validated && ti->isInTM)
 | 
			
		||||
    fxTMReloadSubMipMapLevel(fxMesa,tObj,level,yoffset,height);
 | 
			
		||||
  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)];		\
 | 
			
		||||
@@ -237,16 +262,13 @@ do {						\
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
@@ -412,7 +445,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,8 +470,8 @@ 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;
 | 
			
		||||
@@ -477,10 +509,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 +563,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,6 +613,7 @@ 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);
 | 
			
		||||
@@ -622,4 +665,14 @@ 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 fxSetupTexture_NoLock(GLcontext *ctx);
 | 
			
		||||
extern void fxSetupTexture(GLcontext *ctx);
 | 
			
		||||
 | 
			
		||||
extern void fxInitPixelTables(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,74 @@ 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)
 | 
			
		||||
  (void) code;
 | 
			
		||||
  return 1;  /* OK? */
 | 
			
		||||
#else
 | 
			
		||||
  FxU32 result;
 | 
			
		||||
  BEGIN_BOARD_LOCK();
 | 
			
		||||
  result = grSstControl(code);
 | 
			
		||||
  END_BOARD_LOCK();
 | 
			
		||||
  return result;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(FX_GLIDE3)
 | 
			
		||||
@@ -90,39 +170,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 +204,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 +232,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,9 +341,76 @@ 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;
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
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 );
 | 
			
		||||
   
 | 
			
		||||
#if 0
 | 
			
		||||
   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);
 | 
			
		||||
#endif
 | 
			
		||||
   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,4 +1,4 @@
 | 
			
		||||
/* $Id: fakeglx.c,v 1.13 1999/11/11 01:29:28 brianp Exp $ */
 | 
			
		||||
/* $Id: fakeglx.c,v 1.12.2.4 1999/12/11 09:20:03 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -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.1 1999/12/10 13:45:39 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -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,8 +1,8 @@
 | 
			
		||||
/* $Id: xfonts.c,v 1.3 1999/11/11 01:29:28 brianp Exp $ */
 | 
			
		||||
/* $Id: xfonts.c,v 1.2.2.1 1999/12/12 17:03:07 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -44,7 +44,7 @@
 | 
			
		||||
#include "GL/xmesa.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "fakeglx.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "xmesaP.h"
 | 
			
		||||
 | 
			
		||||
/* Some debugging info.  */
 | 
			
		||||
@@ -338,7 +338,8 @@ void Fake_glXUseXFont( Font font, int first, int count, int listbase )
 | 
			
		||||
      width = ch->rbearing - ch->lbearing;
 | 
			
		||||
      height = ch->ascent + ch->descent;
 | 
			
		||||
      x0 = - ch->lbearing;
 | 
			
		||||
      y0 = ch->descent - 1;
 | 
			
		||||
      y0 = ch->descent - 0;  /* XXX used to subtract 1 here */
 | 
			
		||||
                             /* but that caused a conformace failure */
 | 
			
		||||
      dx = ch->width;
 | 
			
		||||
      dy = 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
# $Id: Makefile.X11,v 1.7 1999/11/11 01:22:28 brianp Exp $
 | 
			
		||||
# $Id: Makefile.X11,v 1.6.2.1 1999/11/16 15:25:50 brianp Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  3.3
 | 
			
		||||
# Version:  3.1
 | 
			
		||||
# Copyright (C) 1995-1999  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 \
 | 
			
		||||
@@ -222,7 +220,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)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: accum.c,v 1.11 1999/11/11 01:22:25 brianp Exp $ */
 | 
			
		||||
/* $Id: accum.c,v 1.10.2.1 1999/11/27 01:35:42 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -25,13 +25,22 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* $XFree86: xc/lib/GL/mesa/src/accum.c,v 1.3 1999/04/04 00:20:17 dawes Exp $ */
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "accum.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "masking.h"
 | 
			
		||||
#include "span.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
@@ -92,10 +101,9 @@ void gl_alloc_accum_buffer( GLcontext *ctx )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
 | 
			
		||||
void gl_ClearAccum( GLcontext *ctx,
 | 
			
		||||
                    GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glAccum");
 | 
			
		||||
 | 
			
		||||
   ctx->Accum.ClearColor[0] = CLAMP( red, -1.0, 1.0 );
 | 
			
		||||
@@ -131,10 +139,8 @@ static void rescale_accum( GLcontext *ctx )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
void gl_Accum( GLcontext *ctx, GLenum op, GLfloat value )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint xpos, ypos, width, height, width4;
 | 
			
		||||
   GLfloat acc_scale;
 | 
			
		||||
   GLubyte rgba[MAX_WIDTH][4];
 | 
			
		||||
@@ -338,7 +344,7 @@ _mesa_Accum( GLenum op, GLfloat value )
 | 
			
		||||
            static GLchan multTable[32768];
 | 
			
		||||
            static GLfloat prevMult = 0.0;
 | 
			
		||||
            GLuint j;
 | 
			
		||||
            const GLint max = 256 / mult;
 | 
			
		||||
            const GLint max = (GLint) (256 / mult);
 | 
			
		||||
            if (mult != prevMult) {
 | 
			
		||||
               assert(max <= 32768);
 | 
			
		||||
               for (j = 0; j < max; j++)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: attrib.c,v 1.11 1999/11/11 01:22:25 brianp Exp $ */
 | 
			
		||||
/* $Id: attrib.c,v 1.10.2.3 1999/12/12 18:30:47 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -25,16 +25,23 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "attrib.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "glmisc.h"
 | 
			
		||||
#include "enable.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "simple_list.h"
 | 
			
		||||
#include "texstate.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
@@ -85,7 +92,11 @@ static void copy_texobj_state( struct gl_texture_object *dest,
 | 
			
		||||
   dest->P = src->P;
 | 
			
		||||
   dest->M = src->M;
 | 
			
		||||
   dest->MinMagThresh = src->MinMagThresh;
 | 
			
		||||
   dest->Palette = src->Palette;
 | 
			
		||||
   memcpy( dest->Palette, src->Palette,
 | 
			
		||||
           sizeof(GLubyte) * MAX_TEXTURE_PALETTE_SIZE * 4 );
 | 
			
		||||
   dest->PaletteSize = src->PaletteSize;
 | 
			
		||||
   dest->PaletteIntFormat = src->PaletteIntFormat;
 | 
			
		||||
   dest->PaletteFormat = src->PaletteFormat;
 | 
			
		||||
   dest->Complete = src->Complete;
 | 
			
		||||
   dest->SampleFunc = src->SampleFunc;
 | 
			
		||||
}
 | 
			
		||||
@@ -417,10 +428,11 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
               GLubyte oldAlphaRef = ctx->Color.AlphaRef;
 | 
			
		||||
               GLenum oldBlendSrc = ctx->Color.BlendSrcRGB;
 | 
			
		||||
               GLenum oldBlendDst = ctx->Color.BlendDstRGB;
 | 
			
		||||
	       GLenum oldLogicOp = ctx->Color.LogicOp;
 | 
			
		||||
               MEMCPY( &ctx->Color, attr->data,
 | 
			
		||||
                       sizeof(struct gl_colorbuffer_attrib) );
 | 
			
		||||
               if (ctx->Color.DrawBuffer != oldDrawBuffer) {
 | 
			
		||||
                  _mesa_DrawBuffer( ctx->Color.DrawBuffer);
 | 
			
		||||
                  gl_DrawBuffer(ctx, ctx->Color.DrawBuffer);
 | 
			
		||||
               }
 | 
			
		||||
               if ((ctx->Color.AlphaFunc != oldAlphaFunc ||
 | 
			
		||||
                    ctx->Color.AlphaRef != oldAlphaRef) &&
 | 
			
		||||
@@ -432,6 +444,9 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
                   ctx->Driver.BlendFunc)
 | 
			
		||||
                  (*ctx->Driver.BlendFunc)( ctx, ctx->Color.BlendSrcRGB,
 | 
			
		||||
                                            ctx->Color.BlendDstRGB);
 | 
			
		||||
	       if (ctx->Color.LogicOp != oldLogicOp &&
 | 
			
		||||
		   ctx->Driver.LogicOpcode)
 | 
			
		||||
		  ctx->Driver.LogicOpcode( ctx, ctx->Color.LogicOp );
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
         case GL_CURRENT_BIT:
 | 
			
		||||
@@ -460,7 +475,7 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
 | 
			
		||||
#define TEST_AND_UPDATE(VALUE, NEWVALUE, ENUM)		\
 | 
			
		||||
	if ((VALUE) != (NEWVALUE)) {			\
 | 
			
		||||
	   _mesa_set_enable( ctx, ENUM, (NEWVALUE) );	\
 | 
			
		||||
	   gl_set_enable( ctx, ENUM, (NEWVALUE) );	\
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Color.AlphaEnabled, enable->AlphaTest, GL_ALPHA_TEST);
 | 
			
		||||
@@ -470,7 +485,7 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
                  GLuint i;
 | 
			
		||||
                  for (i=0;i<MAX_CLIP_PLANES;i++) {
 | 
			
		||||
                     if (ctx->Transform.ClipEnabled[i] != enable->ClipPlane[i])
 | 
			
		||||
                        _mesa_set_enable( ctx, (GLenum) (GL_CLIP_PLANE0 + i), enable->ClipPlane[i] );
 | 
			
		||||
                        gl_set_enable( ctx, (GLenum) (GL_CLIP_PLANE0 + i), enable->ClipPlane[i] );
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
               TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial, GL_COLOR_MATERIAL);
 | 
			
		||||
@@ -585,7 +600,7 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
                  (*ctx->Driver.Fogfv)( ctx, GL_FOG_INDEX, &index );
 | 
			
		||||
                  (*ctx->Driver.Fogfv)( ctx, GL_FOG_COLOR, ctx->Fog.Color );
 | 
			
		||||
               }
 | 
			
		||||
	       ctx->Enabled &= ENABLE_FOG;
 | 
			
		||||
	       ctx->Enabled &= ~ENABLE_FOG;
 | 
			
		||||
	       if (ctx->Fog.Enabled) ctx->Enabled |= ENABLE_FOG;
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
@@ -613,7 +628,13 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
               }
 | 
			
		||||
               (*ctx->Driver.Enable)( ctx, GL_LIGHTING, ctx->Light.Enabled );
 | 
			
		||||
            }
 | 
			
		||||
	    ctx->Enabled &= ENABLE_LIGHT;
 | 
			
		||||
            if (ctx->Light.ShadeModel == GL_FLAT)
 | 
			
		||||
               ctx->TriangleCaps |= DD_FLATSHADE;
 | 
			
		||||
            else
 | 
			
		||||
               ctx->TriangleCaps &= ~DD_FLATSHADE;
 | 
			
		||||
            if (ctx->Driver.ShadeModel)
 | 
			
		||||
               (*ctx->Driver.ShadeModel)(ctx, ctx->Light.ShadeModel);
 | 
			
		||||
	    ctx->Enabled &= ~ENABLE_LIGHT;
 | 
			
		||||
	    if (ctx->Light.Enabled && !is_empty_list(&ctx->Light.EnabledList))
 | 
			
		||||
	       ctx->Enabled |= ENABLE_LIGHT;
 | 
			
		||||
            break;
 | 
			
		||||
@@ -731,8 +752,8 @@ void gl_PopAttrib( GLcontext* ctx )
 | 
			
		||||
	    struct gl_viewport_attrib *v = 
 | 
			
		||||
	       (struct gl_viewport_attrib *)attr->data;
 | 
			
		||||
	    
 | 
			
		||||
	    _mesa_Viewport( v->X, v->Y, v->Width, v->Height );
 | 
			
		||||
	    _mesa_DepthRange( v->Near, v->Far );
 | 
			
		||||
	    gl_Viewport( ctx, v->X, v->Y, v->Width, v->Height );
 | 
			
		||||
	    gl_DepthRange( ctx, v->Near, v->Far );
 | 
			
		||||
	    break;
 | 
			
		||||
	 }
 | 
			
		||||
         default:
 | 
			
		||||
@@ -846,37 +867,3 @@ void gl_PopClientAttrib( GLcontext *ctx )
 | 
			
		||||
   ctx->NewState = NEW_ALL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_PushAttrib( GLbitfield mask )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   gl_PushAttrib(ctx, mask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_PopAttrib( void )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   gl_PopAttrib(ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_PushClientAttrib( GLbitfield mask )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   gl_PushClientAttrib(ctx, mask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_PopClientAttrib( void )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   gl_PopClientAttrib(ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: clip.c,v 1.5 1999/11/11 01:22:25 brianp Exp $ */
 | 
			
		||||
/* $Id: clip.c,v 1.4.2.1 1999/11/25 16:51:24 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,10 +25,19 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "clip.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
@@ -42,6 +51,15 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define CLIP_RGBA0    0x1
 | 
			
		||||
#define CLIP_RGBA1    0x2
 | 
			
		||||
#define CLIP_TEX0     0x4
 | 
			
		||||
#define CLIP_TEX1     0x8
 | 
			
		||||
#define CLIP_INDEX0   0x10
 | 
			
		||||
#define CLIP_INDEX1   0x20
 | 
			
		||||
#define CLIP_FOG_COORD 0x40
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Linear interpolation between A and B: */
 | 
			
		||||
#define LINTERP( T, A, B )   ( (A) + (T) * ( (B) - (A) ) )
 | 
			
		||||
 | 
			
		||||
@@ -58,16 +76,7 @@ do {								\
 | 
			
		||||
} while(0)
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define CLIP_RGBA0    0x1
 | 
			
		||||
#define CLIP_RGBA1    0x2
 | 
			
		||||
#define CLIP_TEX0     0x4
 | 
			
		||||
#define CLIP_TEX1     0x8
 | 
			
		||||
#define CLIP_INDEX0   0x10
 | 
			
		||||
#define CLIP_INDEX1   0x20
 | 
			
		||||
 | 
			
		||||
static clip_interp_func clip_interp_tab[0x40]; 
 | 
			
		||||
static clip_interp_func clip_interp_tab[0x80]; 
 | 
			
		||||
 | 
			
		||||
#define IND 0
 | 
			
		||||
#define NAME clip_nil
 | 
			
		||||
@@ -113,6 +122,50 @@ static clip_interp_func clip_interp_tab[0x40];
 | 
			
		||||
#define NAME clipINDEX0_INDEX1
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clip_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_RGBA0|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipRGBA0_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipRGBA0_RGBA1_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipTEX0_RGBA0_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipTEX0_RGBA0_RGBA1_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipTEX1_TEX0_RGBA0_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_TEX0|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipTEX0_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_TEX1|CLIP_TEX0|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipTEX1_TEX0_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipTEX1_TEX0_RGBA0_RGBA1_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_INDEX0|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipINDEX0_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
#define IND (CLIP_INDEX0|CLIP_INDEX1|CLIP_FOG_COORD)
 | 
			
		||||
#define NAME clipINDEX0_INDEX1_FOG
 | 
			
		||||
#include "interp_tmp.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -122,17 +175,9 @@ static clip_interp_func clip_interp_tab[0x40];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ClipPlane( GLenum plane, const GLdouble *eq )
 | 
			
		||||
void gl_ClipPlane( GLcontext* ctx, GLenum plane, const GLfloat *equation )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint p;
 | 
			
		||||
   GLfloat equation[4];
 | 
			
		||||
 | 
			
		||||
   equation[0] = eq[0];
 | 
			
		||||
   equation[1] = eq[1];
 | 
			
		||||
   equation[2] = eq[2];
 | 
			
		||||
   equation[3] = eq[3];
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glClipPlane");
 | 
			
		||||
 | 
			
		||||
@@ -183,10 +228,8 @@ void gl_update_userclip( GLcontext *ctx )
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetClipPlane( GLenum plane, GLdouble *equation )
 | 
			
		||||
void gl_GetClipPlane( GLcontext* ctx, GLenum plane, GLdouble *equation )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint p;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END(ctx, "glGetClipPlane");
 | 
			
		||||
@@ -353,6 +396,8 @@ void gl_update_clipmask( GLcontext *ctx )
 | 
			
		||||
	 mask |= CLIP_INDEX1;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->FogMode == FOG_FRAGMENT && (ctx->TriangleCaps & DD_CLIP_FOG_COORD))
 | 
			
		||||
      mask |= CLIP_FOG_COORD;
 | 
			
		||||
   
 | 
			
		||||
   ctx->ClipInterpFunc = clip_interp_tab[mask];
 | 
			
		||||
   ctx->poly_clip_tab = gl_poly_clip_tab[0];
 | 
			
		||||
@@ -448,11 +493,22 @@ void gl_init_clip(void)
 | 
			
		||||
   clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0] = clipTEX1_TEX0_RGBA0;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1] = 
 | 
			
		||||
      clipTEX1_TEX0_RGBA0_RGBA1;
 | 
			
		||||
 | 
			
		||||
   clip_interp_tab[CLIP_TEX0] = clipTEX0;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX1|CLIP_TEX0] = clipTEX1_TEX0;
 | 
			
		||||
 | 
			
		||||
   clip_interp_tab[CLIP_INDEX0] = clipINDEX0;
 | 
			
		||||
   clip_interp_tab[CLIP_INDEX0|CLIP_INDEX1] = clipINDEX0_INDEX1;
 | 
			
		||||
 | 
			
		||||
   clip_interp_tab[CLIP_FOG_COORD] = clip_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_RGBA0|CLIP_FOG_COORD] = clipRGBA0_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD] = clipRGBA0_RGBA1_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD] = clipTEX0_RGBA0_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD] = clipTEX0_RGBA0_RGBA1_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD] = clipTEX1_TEX0_RGBA0_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD] = 
 | 
			
		||||
      clipTEX1_TEX0_RGBA0_RGBA1_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX0|CLIP_FOG_COORD] = clipTEX0_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_FOG_COORD] = clipTEX1_TEX0_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_INDEX0|CLIP_FOG_COORD] = clipINDEX0_FOG;
 | 
			
		||||
   clip_interp_tab[CLIP_INDEX0|CLIP_INDEX1|CLIP_FOG_COORD] = clipINDEX0_INDEX1_FOG;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: context.c,v 1.19 1999/11/11 01:22:25 brianp Exp $ */
 | 
			
		||||
/* $Id: context.c,v 1.18.2.6 1999/12/04 21:13:44 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -25,6 +25,8 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* $XFree86: xc/lib/GL/mesa/src/context.c,v 1.4 1999/04/04 00:20:21 dawes Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * If multi-threading is enabled (-DTHREADS) then each thread has it's
 | 
			
		||||
 * own rendering context.  A thread obtains the pointer to its GLcontext
 | 
			
		||||
@@ -34,34 +36,43 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "accum.h"
 | 
			
		||||
#include "alphabuf.h"
 | 
			
		||||
#include "api.h"
 | 
			
		||||
#include "clip.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "cva.h"
 | 
			
		||||
#include "depth.h"
 | 
			
		||||
#include "dispatch.h"
 | 
			
		||||
#include "dlist.h"
 | 
			
		||||
#include "eval.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
#include "extensions.h"
 | 
			
		||||
#include "fog.h"
 | 
			
		||||
#include "glapi.h"
 | 
			
		||||
#include "get.h"
 | 
			
		||||
#include "hash.h"
 | 
			
		||||
#include "light.h"
 | 
			
		||||
#include "lines.h"
 | 
			
		||||
#include "dlist.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "mmath.h"
 | 
			
		||||
#include "pb.h"
 | 
			
		||||
#include "pipeline.h"
 | 
			
		||||
#include "points.h"
 | 
			
		||||
#include "pointers.h"
 | 
			
		||||
#include "quads.h"
 | 
			
		||||
#include "shade.h"
 | 
			
		||||
#include "simple_list.h"
 | 
			
		||||
@@ -85,6 +96,40 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Memory allocation functions.  Called via the MALLOC, CALLOC and
 | 
			
		||||
 * FREE macros when DEBUG symbol is defined.
 | 
			
		||||
 * You might want to set breakpoints on these functions or plug in
 | 
			
		||||
 * other memory allocation functions.  The Mesa sources should only
 | 
			
		||||
 * use the MALLOC and FREE macros (which could also be overriden).
 | 
			
		||||
 *
 | 
			
		||||
 * XXX these functions should probably go into a new glmemory.c file.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Allocate memory (uninitialized)
 | 
			
		||||
 */
 | 
			
		||||
void *gl_malloc(size_t bytes)
 | 
			
		||||
{
 | 
			
		||||
   return malloc(bytes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Allocate memory and initialize to zero.
 | 
			
		||||
 */
 | 
			
		||||
void *gl_calloc(size_t bytes)
 | 
			
		||||
{
 | 
			
		||||
   return calloc(1, bytes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Free memory
 | 
			
		||||
 */
 | 
			
		||||
void gl_free(void *ptr)
 | 
			
		||||
{
 | 
			
		||||
   free(ptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
/*****                  Context and Thread management             *****/
 | 
			
		||||
@@ -113,7 +158,7 @@ static void set_thread_context( GLcontext *ctx ) {
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
/* One Current Context pointer for all threads in the address space */
 | 
			
		||||
GLcontext *_mesa_current_context = NULL;
 | 
			
		||||
GLcontext *CC = NULL;
 | 
			
		||||
struct immediate *CURRENT_INPUT = NULL;
 | 
			
		||||
 | 
			
		||||
#endif /*THREADS*/
 | 
			
		||||
@@ -534,6 +579,7 @@ static void init_1d_map( struct gl_1d_map *map, int n, const float *initial )
 | 
			
		||||
      for (i=0;i<n;i++)
 | 
			
		||||
         map->Points[i] = initial[i];
 | 
			
		||||
   }
 | 
			
		||||
   map->Retain = GL_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -552,20 +598,10 @@ static void init_2d_map( struct gl_2d_map *map, int n, const float *initial )
 | 
			
		||||
      for (i=0;i<n;i++)
 | 
			
		||||
         map->Points[i] = initial[i];
 | 
			
		||||
   }
 | 
			
		||||
   map->Retain = GL_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void init_palette( struct gl_palette *p )
 | 
			
		||||
{
 | 
			
		||||
   p->Table[0] = 255;
 | 
			
		||||
   p->Table[1] = 255;
 | 
			
		||||
   p->Table[2] = 255;
 | 
			
		||||
   p->Table[3] = 255;
 | 
			
		||||
   p->Size = 1;
 | 
			
		||||
   p->IntFormat = GL_RGBA;
 | 
			
		||||
   p->Format = GL_RGBA;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Initialize a gl_context structure to default values.
 | 
			
		||||
@@ -882,9 +918,9 @@ static void initialize_context( GLcontext *ctx )
 | 
			
		||||
      ctx->Stencil.ZPassFunc = GL_KEEP;
 | 
			
		||||
      ctx->Stencil.ZFailFunc = GL_KEEP;
 | 
			
		||||
      ctx->Stencil.Ref = 0;
 | 
			
		||||
      ctx->Stencil.ValueMask = 0xff;
 | 
			
		||||
      ctx->Stencil.ValueMask = STENCIL_MAX;
 | 
			
		||||
      ctx->Stencil.Clear = 0;
 | 
			
		||||
      ctx->Stencil.WriteMask = 0xff;
 | 
			
		||||
      ctx->Stencil.WriteMask = STENCIL_MAX;
 | 
			
		||||
 | 
			
		||||
      /* Texture group */
 | 
			
		||||
      ctx->Texture.CurrentUnit = 0;      /* multitexture */
 | 
			
		||||
@@ -894,7 +930,14 @@ static void initialize_context( GLcontext *ctx )
 | 
			
		||||
      for (i=0; i<MAX_TEXTURE_UNITS; i++)
 | 
			
		||||
         init_texture_unit( ctx, i );
 | 
			
		||||
 | 
			
		||||
      init_palette(&ctx->Texture.Palette);
 | 
			
		||||
      ctx->Texture.SharedPalette = GL_FALSE;
 | 
			
		||||
      ctx->Texture.Palette[0] = 255;
 | 
			
		||||
      ctx->Texture.Palette[1] = 255;
 | 
			
		||||
      ctx->Texture.Palette[2] = 255;
 | 
			
		||||
      ctx->Texture.Palette[3] = 255;
 | 
			
		||||
      ctx->Texture.PaletteSize = 1;
 | 
			
		||||
      ctx->Texture.PaletteIntFormat = GL_RGBA;
 | 
			
		||||
      ctx->Texture.PaletteFormat = GL_RGBA;
 | 
			
		||||
 | 
			
		||||
      /* Transformation group */
 | 
			
		||||
      ctx->Transform.MatrixMode = GL_MODELVIEW;
 | 
			
		||||
@@ -1028,6 +1071,7 @@ static void initialize_context( GLcontext *ctx )
 | 
			
		||||
 | 
			
		||||
      /* For debug/development only */
 | 
			
		||||
      ctx->NoRaster = getenv("MESA_NO_RASTER") ? GL_TRUE : GL_FALSE;
 | 
			
		||||
      ctx->FirstTimeCurrent = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
      /* Dither disable */
 | 
			
		||||
      ctx->NoDither = getenv("MESA_NO_DITHER") ? GL_TRUE : GL_FALSE;
 | 
			
		||||
@@ -1289,10 +1333,12 @@ GLcontext *gl_create_context( GLvisual *visual,
 | 
			
		||||
   ctx->Driver.ReadDepthSpanFloat = gl_read_depth_span_float;
 | 
			
		||||
   ctx->Driver.ReadDepthSpanInt = gl_read_depth_span_int;
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
#ifdef PROFILE
 | 
			
		||||
   init_timings( ctx );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GL_VERSION_1_1
 | 
			
		||||
   if (!alloc_proxy_textures(ctx)) {
 | 
			
		||||
      free_shared_state(ctx, ctx->Shared);
 | 
			
		||||
      FREE(ctx->VB);
 | 
			
		||||
@@ -1300,11 +1346,10 @@ GLcontext *gl_create_context( GLvisual *visual,
 | 
			
		||||
      FREE(ctx);
 | 
			
		||||
      return NULL;
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
   /* setup API dispatch tables */
 | 
			
		||||
   _mesa_init_exec_table( &ctx->Exec );
 | 
			
		||||
   _mesa_init_dlist_table( &ctx->Save );
 | 
			
		||||
   ctx->CurrentDispatch = &ctx->Exec;
 | 
			
		||||
   gl_init_api_function_pointers( ctx );
 | 
			
		||||
   ctx->API = ctx->Exec;   /* GL_EXECUTE is default */
 | 
			
		||||
 | 
			
		||||
   return ctx;
 | 
			
		||||
}
 | 
			
		||||
@@ -1418,8 +1463,8 @@ void gl_destroy_context( GLcontext *ctx )
 | 
			
		||||
      FREE( (void *) ctx );
 | 
			
		||||
 | 
			
		||||
#ifndef THREADS
 | 
			
		||||
      if (ctx == _mesa_current_context) {
 | 
			
		||||
         _mesa_current_context = NULL;
 | 
			
		||||
      if (ctx==CC) {
 | 
			
		||||
         CC = NULL;
 | 
			
		||||
	 CURRENT_INPUT = NULL;
 | 
			
		||||
      }
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1488,42 +1533,52 @@ void gl_destroy_framebuffer( GLframebuffer *buffer )
 | 
			
		||||
/*
 | 
			
		||||
 * Set the current context, binding the given frame buffer to the context.
 | 
			
		||||
 */
 | 
			
		||||
void gl_make_current( GLcontext *newCtx, GLframebuffer *buffer )
 | 
			
		||||
void gl_make_current( GLcontext *ctx, GLframebuffer *buffer )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(oldCtx);
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
 | 
			
		||||
   /* Flush the old context
 | 
			
		||||
    */
 | 
			
		||||
   if (oldCtx) {
 | 
			
		||||
      ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(oldCtx, "gl_make_current");
 | 
			
		||||
   if (CC) {
 | 
			
		||||
      ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(CC, "gl_make_current");
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#ifdef THREADS
 | 
			
		||||
   /* TODO: unbind old buffer from context? */
 | 
			
		||||
   set_thread_context( newCtx );
 | 
			
		||||
   set_thread_context( ctx );
 | 
			
		||||
#else
 | 
			
		||||
   if (oldCtx && oldCtx->Buffer) {
 | 
			
		||||
   if (CC && CC->Buffer) {
 | 
			
		||||
      /* unbind frame buffer from context */
 | 
			
		||||
      oldCtx->Buffer = NULL;
 | 
			
		||||
      CC->Buffer = NULL;
 | 
			
		||||
   }
 | 
			
		||||
   _mesa_current_context = newCtx;
 | 
			
		||||
   if (newCtx) {
 | 
			
		||||
      SET_IMMEDIATE(newCtx, newCtx->input);
 | 
			
		||||
   CC = ctx;
 | 
			
		||||
   if (ctx) {
 | 
			
		||||
      SET_IMMEDIATE(ctx, ctx->input);
 | 
			
		||||
   }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
   if (newCtx)
 | 
			
		||||
      _glapi_set_dispatch(newCtx->CurrentDispatch);
 | 
			
		||||
   else
 | 
			
		||||
      _glapi_set_dispatch(NULL);  /* none current */
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE) fprintf(stderr, "gl_make_current()\n");
 | 
			
		||||
 | 
			
		||||
   if (newCtx && buffer) {
 | 
			
		||||
      /* TODO: check if newCtx and buffer's visual match??? */
 | 
			
		||||
      newCtx->Buffer = buffer;      /* Bind the frame buffer to the context */
 | 
			
		||||
      newCtx->NewState = NEW_ALL;   /* just to be safe */
 | 
			
		||||
      gl_update_state( newCtx );
 | 
			
		||||
   if (ctx && buffer) {
 | 
			
		||||
      /* TODO: check if ctx and buffer's visual match??? */
 | 
			
		||||
      ctx->Buffer = buffer;      /* Bind the frame buffer to the context */
 | 
			
		||||
      ctx->NewState = NEW_ALL;   /* just to be safe */
 | 
			
		||||
      gl_update_state( ctx );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* We can use this to help debug user's problems.  Tell the to set
 | 
			
		||||
    * the MESA_INFO env variable before running their app.  Then the
 | 
			
		||||
    * first time each context is made current we'll print some useful
 | 
			
		||||
    * information.
 | 
			
		||||
    */
 | 
			
		||||
   if (ctx && ctx->FirstTimeCurrent) {
 | 
			
		||||
      if (getenv("MESA_INFO")) {
 | 
			
		||||
         fprintf(stderr, "Mesa GL_VERSION = %s\n", (char *) gl_GetString(ctx, GL_VERSION));
 | 
			
		||||
         fprintf(stderr, "Mesa GL_RENDERER = %s\n", (char *) gl_GetString(ctx, GL_RENDERER));
 | 
			
		||||
         fprintf(stderr, "Mesa GL_VENDOR = %s\n", (char *) gl_GetString(ctx, GL_VENDOR));
 | 
			
		||||
         fprintf(stderr, "Mesa GL_EXTENSIONS = %s\n", (char *) gl_GetString(ctx, GL_EXTENSIONS));
 | 
			
		||||
      }
 | 
			
		||||
      ctx->FirstTimeCurrent = GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1536,7 +1591,7 @@ GLcontext *gl_get_current_context( void )
 | 
			
		||||
#ifdef THREADS
 | 
			
		||||
   return gl_get_thread_context();
 | 
			
		||||
#else
 | 
			
		||||
   return _mesa_current_context;
 | 
			
		||||
   return CC;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1620,73 +1675,26 @@ void gl_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This should be called by device drivers just before they do a
 | 
			
		||||
 * swapbuffers.  Any pending rendering commands will be executed.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_swapbuffers(GLcontext *ctx)
 | 
			
		||||
{
 | 
			
		||||
   FLUSH_VB( ctx, "swap buffers" );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return pointer to this context's current API dispatch table.
 | 
			
		||||
 * It'll either be the immediate-mode execute dispatcher or the
 | 
			
		||||
 * display list compile dispatcher.
 | 
			
		||||
 * Someday a GLS library or OpenGL-like debugger may call this function
 | 
			
		||||
 * to register it's own set of API entry points.
 | 
			
		||||
 * Input: ctx - the context to set API pointers for
 | 
			
		||||
 *        api - if NULL, restore original API pointers
 | 
			
		||||
 *              else, set API function table to this table.
 | 
			
		||||
 */
 | 
			
		||||
struct _glapi_table *
 | 
			
		||||
_mesa_get_dispatch(GLcontext *ctx)
 | 
			
		||||
void gl_set_api_table( GLcontext *ctx, const struct gl_api_table *api )
 | 
			
		||||
{
 | 
			
		||||
   return ctx->CurrentDispatch;
 | 
			
		||||
   if (api) {
 | 
			
		||||
      MEMCPY( &ctx->API, api, sizeof(struct gl_api_table) );
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      MEMCPY( &ctx->API, &ctx->Exec, sizeof(struct gl_api_table) );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ResizeBuffersMESA( void )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
 | 
			
		||||
   GLuint buf_width, buf_height;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API)
 | 
			
		||||
      fprintf(stderr, "glResizeBuffersMESA\n");
 | 
			
		||||
 | 
			
		||||
   /* ask device driver for size of output buffer */
 | 
			
		||||
   (*ctx->Driver.GetBufferSize)( ctx, &buf_width, &buf_height );
 | 
			
		||||
 | 
			
		||||
   /* see if size of device driver's color buffer (window) has changed */
 | 
			
		||||
   if (ctx->Buffer->Width == (GLint) buf_width &&
 | 
			
		||||
       ctx->Buffer->Height == (GLint) buf_height)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   ctx->NewState |= NEW_RASTER_OPS;  /* to update scissor / window bounds */
 | 
			
		||||
 | 
			
		||||
   /* save buffer size */
 | 
			
		||||
   ctx->Buffer->Width = buf_width;
 | 
			
		||||
   ctx->Buffer->Height = buf_height;
 | 
			
		||||
 | 
			
		||||
   /* Reallocate other buffers if needed. */
 | 
			
		||||
   if (ctx->Visual->DepthBits>0) {
 | 
			
		||||
      /* reallocate depth buffer */
 | 
			
		||||
      (*ctx->Driver.AllocDepthBuffer)( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   if (ctx->Visual->StencilBits>0) {
 | 
			
		||||
      /* reallocate stencil buffer */
 | 
			
		||||
      gl_alloc_stencil_buffer( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   if (ctx->Visual->AccumBits>0) {
 | 
			
		||||
      /* reallocate accum buffer */
 | 
			
		||||
      gl_alloc_accum_buffer( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   if (ctx->Visual->SoftwareAlpha) {
 | 
			
		||||
      gl_alloc_alpha_buffers( ctx );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
/*****                Miscellaneous functions                     *****/
 | 
			
		||||
@@ -1809,6 +1817,66 @@ void gl_error( GLcontext *ctx, GLenum error, const char *s )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Execute a glGetError command
 | 
			
		||||
 */
 | 
			
		||||
GLenum gl_GetError( GLcontext *ctx )
 | 
			
		||||
{
 | 
			
		||||
   GLenum e = ctx->ErrorValue;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL( ctx, "glGetError", (GLenum) 0);
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API)
 | 
			
		||||
      fprintf(stderr, "glGetError <-- %s\n", gl_lookup_enum_by_nr(e));
 | 
			
		||||
 | 
			
		||||
   ctx->ErrorValue = (GLenum) GL_NO_ERROR;
 | 
			
		||||
   return e;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_ResizeBuffersMESA( GLcontext *ctx )
 | 
			
		||||
{
 | 
			
		||||
   GLuint buf_width, buf_height;
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API)
 | 
			
		||||
      fprintf(stderr, "glResizeBuffersMESA\n");
 | 
			
		||||
 | 
			
		||||
   /* ask device driver for size of output buffer */
 | 
			
		||||
   (*ctx->Driver.GetBufferSize)( ctx, &buf_width, &buf_height );
 | 
			
		||||
 | 
			
		||||
   /* see if size of device driver's color buffer (window) has changed */
 | 
			
		||||
   if (ctx->Buffer->Width == (GLint) buf_width &&
 | 
			
		||||
       ctx->Buffer->Height == (GLint) buf_height)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   ctx->NewState |= NEW_RASTER_OPS;  /* to update scissor / window bounds */
 | 
			
		||||
 | 
			
		||||
   /* save buffer size */
 | 
			
		||||
   ctx->Buffer->Width = buf_width;
 | 
			
		||||
   ctx->Buffer->Height = buf_height;
 | 
			
		||||
 | 
			
		||||
   /* Reallocate other buffers if needed. */
 | 
			
		||||
   if (ctx->Visual->DepthBits>0) {
 | 
			
		||||
      /* reallocate depth buffer */
 | 
			
		||||
      (*ctx->Driver.AllocDepthBuffer)( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   if (ctx->Visual->StencilBits>0) {
 | 
			
		||||
      /* reallocate stencil buffer */
 | 
			
		||||
      gl_alloc_stencil_buffer( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   if (ctx->Visual->AccumBits>0) {
 | 
			
		||||
      /* reallocate accum buffer */
 | 
			
		||||
      gl_alloc_accum_buffer( ctx );
 | 
			
		||||
   }
 | 
			
		||||
   if (ctx->Visual->SoftwareAlpha) {
 | 
			
		||||
      gl_alloc_alpha_buffers( ctx );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
/*****                   State update logic                       *****/
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
@@ -1925,21 +1993,17 @@ static void update_pixel_masking( GLcontext *ctx )
 | 
			
		||||
static void update_fog_mode( GLcontext *ctx )
 | 
			
		||||
{
 | 
			
		||||
   int old_mode = ctx->FogMode;
 | 
			
		||||
   ctx->FogMode = FOG_NONE;
 | 
			
		||||
 | 
			
		||||
   if (ctx->Fog.Enabled) {
 | 
			
		||||
      if (ctx->Texture.Enabled)
 | 
			
		||||
         ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
      else if (ctx->Hint.Fog == GL_NICEST)
 | 
			
		||||
         ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
      else
 | 
			
		||||
         ctx->FogMode = FOG_VERTEX;
 | 
			
		||||
      ctx->FogMode = FOG_VERTEX;
 | 
			
		||||
 | 
			
		||||
      if (ctx->Driver.GetParameteri)
 | 
			
		||||
         if ((ctx->Driver.GetParameteri)( ctx, DD_HAVE_HARDWARE_FOG ))
 | 
			
		||||
            ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      ctx->FogMode = FOG_NONE;
 | 
			
		||||
      if (ctx->Texture.Enabled || ctx->Hint.Fog == GL_NICEST)
 | 
			
		||||
	 ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
 | 
			
		||||
      if ( ctx->Driver.GetParameteri && 
 | 
			
		||||
	   ctx->Driver.GetParameteri( ctx, DD_HAVE_HARDWARE_FOG ) )
 | 
			
		||||
	 ctx->FogMode = FOG_FRAGMENT;
 | 
			
		||||
   }
 | 
			
		||||
   
 | 
			
		||||
   if (old_mode != ctx->FogMode)
 | 
			
		||||
@@ -2078,14 +2142,6 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      ctx->Texture.Unit[1].LastEnvMode = ctx->Texture.Unit[1].EnvMode;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if ((ctx->NewState & ~(NEW_CLIENT_STATE|NEW_TEXTURE_ENABLE)) == 0) {
 | 
			
		||||
 | 
			
		||||
      if (MESA_VERBOSE&VERBOSE_STATE)
 | 
			
		||||
	 fprintf(stderr, "update_state: goto finished\n");
 | 
			
		||||
 | 
			
		||||
      goto finished;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->NewState & NEW_TEXTURE_MATRIX) {
 | 
			
		||||
      ctx->Enabled &= ~(ENABLE_TEXMAT0|ENABLE_TEXMAT1);
 | 
			
		||||
 | 
			
		||||
@@ -2102,7 +2158,7 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->NewState & NEW_TEXTURING) {
 | 
			
		||||
   if (ctx->NewState & (NEW_TEXTURING | NEW_TEXTURE_ENABLE)) {
 | 
			
		||||
      ctx->Texture.NeedNormals = GL_FALSE;
 | 
			
		||||
      gl_update_dirty_texobjs(ctx);
 | 
			
		||||
      ctx->Enabled &= ~(ENABLE_TEXGEN0|ENABLE_TEXGEN1);
 | 
			
		||||
@@ -2264,7 +2320,7 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->NewState & ~(NEW_CLIENT_STATE|NEW_TEXTURE_ENABLE|
 | 
			
		||||
   if (ctx->NewState & ~(NEW_CLIENT_STATE|
 | 
			
		||||
			 NEW_DRIVER_STATE|NEW_USER_CLIP|
 | 
			
		||||
			 NEW_POLYGON))
 | 
			
		||||
      gl_update_clipmask(ctx);
 | 
			
		||||
@@ -2272,6 +2328,7 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
   if (ctx->NewState & (NEW_LIGHTING|
 | 
			
		||||
			NEW_RASTER_OPS|
 | 
			
		||||
			NEW_TEXTURING|
 | 
			
		||||
			NEW_TEXTURE_ENABLE|
 | 
			
		||||
			NEW_TEXTURE_ENV|
 | 
			
		||||
			NEW_POLYGON|
 | 
			
		||||
			NEW_DRVSTATE0|
 | 
			
		||||
@@ -2367,7 +2424,7 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      oldnorm = ctx->NeedEyeNormals;
 | 
			
		||||
 | 
			
		||||
      ctx->NeedNormals = (ctx->Light.Enabled || ctx->Texture.NeedNormals);
 | 
			
		||||
      ctx->NeedEyeCoords = ((ctx->Fog.Enabled && ctx->Hint.Fog != GL_NICEST) ||
 | 
			
		||||
      ctx->NeedEyeCoords = (ctx->FogMode == FOG_VERTEX ||
 | 
			
		||||
			    ctx->Point.Attenuated);
 | 
			
		||||
      ctx->NeedEyeNormals = GL_FALSE;
 | 
			
		||||
 | 
			
		||||
@@ -2423,7 +2480,6 @@ void gl_update_state( GLcontext *ctx )
 | 
			
		||||
      gl_update_normal_transform( ctx );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 finished:
 | 
			
		||||
   gl_update_pipelines(ctx);
 | 
			
		||||
   ctx->NewState = 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: dd.h,v 1.4 1999/10/21 12:46:27 brianp Exp $ */
 | 
			
		||||
/* $Id: dd.h,v 1.4.2.1 1999/12/12 18:30:47 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -659,6 +659,7 @@ struct dd_function_table {
 | 
			
		||||
   void (*Lightfv)(GLcontext *ctx, GLenum light,
 | 
			
		||||
		   GLenum pname, const GLfloat *params, GLint nparams );
 | 
			
		||||
   void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
 | 
			
		||||
   void (*LogicOpcode)(GLcontext *ctx, GLenum opcode);
 | 
			
		||||
   void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode);
 | 
			
		||||
   void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
 | 
			
		||||
   void (*ShadeModel)(GLcontext *ctx, GLenum mode);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: drawpix.c,v 1.6 1999/11/11 01:22:26 brianp Exp $ */
 | 
			
		||||
/* $Id: drawpix.c,v 1.5.2.1 1999/11/26 16:28:03 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,10 +25,19 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "drawpix.h"
 | 
			
		||||
#include "feedback.h"
 | 
			
		||||
@@ -44,16 +53,23 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* TODO:  apply texture mapping to fragments */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Try to do a fast and simple RGB(a) glDrawPixels.
 | 
			
		||||
 * Try to do a fast glDrawPixels.  Conditions include:
 | 
			
		||||
 *   not using a display list
 | 
			
		||||
 *   simple pixel unpacking
 | 
			
		||||
 *   no raster ops
 | 
			
		||||
 *   etc....
 | 
			
		||||
 * Return:  GL_TRUE if success, GL_FALSE if slow path must be used instead
 | 
			
		||||
 */
 | 
			
		||||
static GLboolean
 | 
			
		||||
simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                   GLsizei width, GLsizei height, GLenum format, GLenum type,
 | 
			
		||||
                   const GLvoid *pixels )
 | 
			
		||||
GLboolean gl_direct_DrawPixels( GLcontext *ctx,
 | 
			
		||||
                                const struct gl_pixelstore_attrib *unpack,
 | 
			
		||||
                                GLsizei width, GLsizei height,
 | 
			
		||||
                                GLenum format, GLenum type,
 | 
			
		||||
                                const GLvoid *pixels )
 | 
			
		||||
{
 | 
			
		||||
   const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
 | 
			
		||||
   GLubyte rgb[MAX_WIDTH][3];
 | 
			
		||||
   GLubyte rgba[MAX_WIDTH][4];
 | 
			
		||||
 | 
			
		||||
@@ -71,10 +87,12 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* see if device driver can do the drawpix */
 | 
			
		||||
   if (ctx->Driver.DrawPixels
 | 
			
		||||
       && (*ctx->Driver.DrawPixels)(ctx, x, y, width, height, format, type,
 | 
			
		||||
                                    unpack, pixels)) {
 | 
			
		||||
      return GL_TRUE;
 | 
			
		||||
   if (ctx->Driver.DrawPixels) {
 | 
			
		||||
      GLint x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
 | 
			
		||||
      GLint y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
 | 
			
		||||
      if ((*ctx->Driver.DrawPixels)(ctx, x, y, width, height, format, type,
 | 
			
		||||
                                    unpack, pixels))
 | 
			
		||||
         return GL_TRUE;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if ((ctx->RasterMask&(~(SCISSOR_BIT|WINCLIP_BIT)))==0
 | 
			
		||||
@@ -88,8 +106,8 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
       && !unpack->SwapBytes
 | 
			
		||||
       && !unpack->LsbFirst) {
 | 
			
		||||
 | 
			
		||||
      GLint destX = x;
 | 
			
		||||
      GLint destY = y;
 | 
			
		||||
      GLint destX = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
 | 
			
		||||
      GLint destY = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
 | 
			
		||||
      GLint drawWidth = width;           /* actual width drawn */
 | 
			
		||||
      GLint drawHeight = height;         /* actual height drawn */
 | 
			
		||||
      GLint skipPixels = unpack->SkipPixels;
 | 
			
		||||
@@ -346,9 +364,10 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
         return GL_FALSE;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* can't do a simple draw, have to use slow path */
 | 
			
		||||
   return GL_FALSE;
 | 
			
		||||
   else {
 | 
			
		||||
      /* can't do direct render, have to use slow path */
 | 
			
		||||
      return GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -356,43 +375,99 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
/*
 | 
			
		||||
 * Do glDrawPixels of index pixels.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                   GLsizei width, GLsizei height,
 | 
			
		||||
                   GLenum type, const GLvoid *pixels )
 | 
			
		||||
static void draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                               const struct gl_image *image )
 | 
			
		||||
{
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
   GLint width, height, widthInBytes;
 | 
			
		||||
   const GLint desty = y;
 | 
			
		||||
   GLint row, drawWidth;
 | 
			
		||||
   GLint i, j;
 | 
			
		||||
   GLdepth zspan[MAX_WIDTH];
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
 | 
			
		||||
   drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
 | 
			
		||||
   assert(image);
 | 
			
		||||
   assert(image->Format == GL_COLOR_INDEX);
 | 
			
		||||
 | 
			
		||||
   width = image->Width;
 | 
			
		||||
   height = image->Height;
 | 
			
		||||
   if (image->Type == GL_BITMAP)
 | 
			
		||||
      widthInBytes = (width + 7) / 8;
 | 
			
		||||
   else
 | 
			
		||||
      widthInBytes = width;
 | 
			
		||||
 | 
			
		||||
   /* Fragment depth values */
 | 
			
		||||
   if (ctx->Depth.Test) {
 | 
			
		||||
   if (ctx->Depth.Test || ctx->Fog.Enabled) {
 | 
			
		||||
      GLdepth zval = (GLdepth) (ctx->Current.RasterPos[2] * DEPTH_SCALE);
 | 
			
		||||
      GLint i;
 | 
			
		||||
      for (i = 0; i < drawWidth; i++) {
 | 
			
		||||
      for (i=0;i<width;i++) {
 | 
			
		||||
	 zspan[i] = zval;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /*
 | 
			
		||||
    * General solution
 | 
			
		||||
    */
 | 
			
		||||
   for (row = 0; row < height; row++, y++) {
 | 
			
		||||
      GLuint indexes[MAX_WIDTH];
 | 
			
		||||
      const GLvoid *source = gl_pixel_addr_in_image(&ctx->Unpack,
 | 
			
		||||
                    pixels, width, height, GL_COLOR_INDEX, type, 0, row, 0);
 | 
			
		||||
      _mesa_unpack_index_span(ctx, drawWidth, GL_UNSIGNED_INT, indexes,
 | 
			
		||||
                              type, source, &ctx->Unpack, GL_TRUE);
 | 
			
		||||
      if (zoom) {
 | 
			
		||||
         gl_write_zoomed_index_span(ctx, drawWidth, x, y, zspan, indexes, desty);
 | 
			
		||||
   /* process the image row by row */
 | 
			
		||||
   for (i=0;i<height;i++,y++) {
 | 
			
		||||
      GLuint ispan[MAX_WIDTH];
 | 
			
		||||
 | 
			
		||||
      /* convert to uints */
 | 
			
		||||
      switch (image->Type) {
 | 
			
		||||
	 case GL_UNSIGNED_BYTE:
 | 
			
		||||
	    {
 | 
			
		||||
	       GLubyte *src = (GLubyte *) image->Data + i * width;
 | 
			
		||||
	       for (j=0;j<width;j++) {
 | 
			
		||||
		  ispan[j] = (GLuint) *src++;
 | 
			
		||||
	       }
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_FLOAT:
 | 
			
		||||
	    {
 | 
			
		||||
	       GLfloat *src = (GLfloat *) image->Data + i * width;
 | 
			
		||||
	       for (j=0;j<width;j++) {
 | 
			
		||||
		  ispan[j] = (GLuint) (GLint) *src++;
 | 
			
		||||
	       }
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
         case GL_BITMAP:
 | 
			
		||||
            {
 | 
			
		||||
	       GLubyte *src = (GLubyte *) image->Data + i * widthInBytes;
 | 
			
		||||
	       for (j=0;j<width;j++) {
 | 
			
		||||
		  ispan[j] = ( src[j >> 3] >> (7 - (j & 0x7)) ) & 1;
 | 
			
		||||
	       }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
	 default:
 | 
			
		||||
	    gl_problem( ctx, "draw_index_pixels type" );
 | 
			
		||||
            return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* apply shift and offset */
 | 
			
		||||
      if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift) {
 | 
			
		||||
         gl_shift_and_offset_ci( ctx, width, ispan );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (ctx->Visual->RGBAflag) {
 | 
			
		||||
	 /* Convert index to RGBA and write to frame buffer */
 | 
			
		||||
	 GLubyte rgba[MAX_WIDTH][4];
 | 
			
		||||
         gl_map_ci_to_rgba( ctx, width, ispan, rgba );
 | 
			
		||||
         if (zoom) {
 | 
			
		||||
            gl_write_zoomed_rgba_span( ctx, width, x, y, zspan, 
 | 
			
		||||
				       (const GLubyte (*)[4])rgba, desty );
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            gl_write_rgba_span( ctx, width, x, y, zspan, rgba, GL_BITMAP );
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         gl_write_index_span(ctx, drawWidth, x, y, zspan, indexes, GL_BITMAP);
 | 
			
		||||
	 /* optionally apply index map then write to frame buffer */
 | 
			
		||||
	 if (ctx->Pixel.MapColorFlag) {
 | 
			
		||||
            gl_map_ci(ctx, width, ispan);
 | 
			
		||||
	 }
 | 
			
		||||
         if (zoom) {
 | 
			
		||||
            gl_write_zoomed_index_span( ctx, width, x, y, zspan, ispan, desty );
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            gl_write_index_span( ctx, width, x, y, zspan, ispan, GL_BITMAP );
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -401,44 +476,83 @@ draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
 * Do glDrawPixels of stencil image.  The image datatype may either
 | 
			
		||||
 * be GLubyte or GLbitmap.
 | 
			
		||||
 */
 | 
			
		||||
static void 
 | 
			
		||||
draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                     GLsizei width, GLsizei height,
 | 
			
		||||
                     GLenum type, const GLvoid *pixels )
 | 
			
		||||
static void draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                                 const struct gl_image *image )
 | 
			
		||||
{
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
   GLint widthInBytes, width, height;
 | 
			
		||||
   const GLint desty = y;
 | 
			
		||||
   GLint row, drawWidth;
 | 
			
		||||
   GLint i;
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
 | 
			
		||||
   if (type != GL_BYTE &&
 | 
			
		||||
       type != GL_UNSIGNED_BYTE &&
 | 
			
		||||
       type != GL_SHORT &&
 | 
			
		||||
       type != GL_UNSIGNED_SHORT &&
 | 
			
		||||
       type != GL_INT &&
 | 
			
		||||
       type != GL_UNSIGNED_INT &&
 | 
			
		||||
       type != GL_FLOAT &&
 | 
			
		||||
       type != GL_BITMAP) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels(stencil type)");
 | 
			
		||||
   if (image->Type != GL_BYTE &&
 | 
			
		||||
       image->Type != GL_UNSIGNED_BYTE &&
 | 
			
		||||
       image->Type != GL_SHORT &&
 | 
			
		||||
       image->Type != GL_UNSIGNED_SHORT &&
 | 
			
		||||
       image->Type != GL_INT &&
 | 
			
		||||
       image->Type != GL_UNSIGNED_INT &&
 | 
			
		||||
       image->Type != GL_FLOAT &&
 | 
			
		||||
       image->Type != GL_BITMAP) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_OPERATION, "glDrawPixels(stencil type)");
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
 | 
			
		||||
   assert(image);
 | 
			
		||||
   assert(image->Format == GL_STENCIL_INDEX);
 | 
			
		||||
   assert(image->Type == GL_UNSIGNED_BYTE || image->Type == GL_BITMAP);
 | 
			
		||||
 | 
			
		||||
   for (row = 0; row < height; row++, y++) {
 | 
			
		||||
      GLstencil values[MAX_WIDTH];
 | 
			
		||||
      GLenum destType = (sizeof(GLstencil) == sizeof(GLubyte))
 | 
			
		||||
                      ? GL_UNSIGNED_BYTE : GL_UNSIGNED_SHORT;
 | 
			
		||||
      const GLvoid *source = gl_pixel_addr_in_image(&ctx->Unpack,
 | 
			
		||||
                    pixels, width, height, GL_COLOR_INDEX, type, 0, row, 0);
 | 
			
		||||
      _mesa_unpack_index_span(ctx, drawWidth, destType, values,
 | 
			
		||||
                              type, source, &ctx->Unpack, GL_TRUE);
 | 
			
		||||
   if (image->Type == GL_UNSIGNED_BYTE)
 | 
			
		||||
      widthInBytes = image->Width;
 | 
			
		||||
   else
 | 
			
		||||
      widthInBytes = (image->Width + 7) / 8;
 | 
			
		||||
   width = image->Width;
 | 
			
		||||
   height = image->Height;
 | 
			
		||||
 | 
			
		||||
      if (zoom) {
 | 
			
		||||
         gl_write_zoomed_stencil_span( ctx, (GLuint) drawWidth, x, y,
 | 
			
		||||
                                       values, desty );
 | 
			
		||||
   /* process the image row by row */
 | 
			
		||||
   for (i=0;i<height;i++,y++) {
 | 
			
		||||
      GLstencil *src = (GLstencil*)image->Data + i * widthInBytes;
 | 
			
		||||
      GLstencil *stencilValues;
 | 
			
		||||
      GLstencil stencilCopy[MAX_WIDTH];
 | 
			
		||||
 | 
			
		||||
      if (image->Type == GL_BITMAP) {
 | 
			
		||||
         /* convert bitmap data to GLubyte (0 or 1) data */
 | 
			
		||||
         GLint j;
 | 
			
		||||
         for (j = 0; j < width; j++) {
 | 
			
		||||
            stencilCopy[j] = ( src[j >> 3] >> (7 - (j & 0x7)) ) & 1;
 | 
			
		||||
         }
 | 
			
		||||
         src = stencilCopy;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift
 | 
			
		||||
          || ctx->Pixel.MapStencilFlag) {
 | 
			
		||||
 | 
			
		||||
         /* make copy of stencil values */
 | 
			
		||||
         if (src != stencilCopy)
 | 
			
		||||
            MEMCPY( stencilCopy, src, width * sizeof(GLstencil));
 | 
			
		||||
 | 
			
		||||
         /* apply shift and offset */
 | 
			
		||||
         if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift) {
 | 
			
		||||
            gl_shift_and_offset_stencil( ctx, width, stencilCopy );
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         /* mapping */
 | 
			
		||||
         if (ctx->Pixel.MapStencilFlag) {
 | 
			
		||||
            gl_map_stencil( ctx, width, stencilCopy );
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         stencilValues = stencilCopy;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         gl_write_stencil_span( ctx, (GLuint) drawWidth, x, y, values );
 | 
			
		||||
         /* use stencil values in-place */
 | 
			
		||||
         stencilValues = src;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* write stencil values to stencil buffer */
 | 
			
		||||
      if (zoom) {
 | 
			
		||||
         gl_write_zoomed_stencil_span( ctx, (GLuint) width, x, y,
 | 
			
		||||
                                       stencilValues, desty );
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         gl_write_stencil_span( ctx, (GLuint) width, x, y, stencilValues );
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
@@ -448,37 +562,30 @@ draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
/*
 | 
			
		||||
 * Do a glDrawPixels of depth values.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                   GLsizei width, GLsizei height,
 | 
			
		||||
                   GLenum type, const GLvoid *pixels )
 | 
			
		||||
static void draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                               const struct gl_image *image )
 | 
			
		||||
{
 | 
			
		||||
   const GLboolean bias_or_scale = ctx->Pixel.DepthBias!=0.0 || ctx->Pixel.DepthScale!=1.0;
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
   GLint width, height;
 | 
			
		||||
   const GLint desty = y;
 | 
			
		||||
   GLubyte rgba[MAX_WIDTH][4];
 | 
			
		||||
   GLuint ispan[MAX_WIDTH];
 | 
			
		||||
   GLint drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
 | 
			
		||||
   const GLboolean bias_or_scale = ctx->Pixel.DepthBias!=0.0 || ctx->Pixel.DepthScale!=1.0;
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
 | 
			
		||||
   if (type != GL_UNSIGNED_BYTE
 | 
			
		||||
       && type != GL_UNSIGNED_BYTE
 | 
			
		||||
       && type != GL_UNSIGNED_SHORT
 | 
			
		||||
       && type != GL_UNSIGNED_SHORT
 | 
			
		||||
       && type != GL_UNSIGNED_INT
 | 
			
		||||
       && type != GL_UNSIGNED_INT
 | 
			
		||||
       && type != GL_FLOAT) {
 | 
			
		||||
      gl_error(ctx, GL_INVALID_ENUM, "glDrawPixels(type)");
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
   assert(image);
 | 
			
		||||
   assert(image->Format == GL_DEPTH_COMPONENT);
 | 
			
		||||
 | 
			
		||||
   /* Colors or indexes */
 | 
			
		||||
   width = image->Width;
 | 
			
		||||
   height = image->Height;
 | 
			
		||||
 | 
			
		||||
   /* Color or index */
 | 
			
		||||
   if (ctx->Visual->RGBAflag) {
 | 
			
		||||
      GLint r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
 | 
			
		||||
      GLint g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
 | 
			
		||||
      GLint b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
 | 
			
		||||
      GLint a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
 | 
			
		||||
      GLint i;
 | 
			
		||||
      for (i = 0; i < drawWidth; i++) {
 | 
			
		||||
      for (i=0; i<width; i++) {
 | 
			
		||||
         rgba[i][RCOMP] = r;
 | 
			
		||||
         rgba[i][GCOMP] = g;
 | 
			
		||||
         rgba[i][BCOMP] = b;
 | 
			
		||||
@@ -487,36 +594,34 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      GLint i;
 | 
			
		||||
      for (i = 0; i < drawWidth; i++) {
 | 
			
		||||
      for (i=0;i<width;i++) {
 | 
			
		||||
	 ispan[i] = ctx->Current.RasterIndex;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (type==GL_UNSIGNED_SHORT && sizeof(GLdepth)==sizeof(GLushort)
 | 
			
		||||
   if (image->Type==GL_UNSIGNED_SHORT && sizeof(GLdepth)==sizeof(GLushort)
 | 
			
		||||
       && !bias_or_scale && !zoom && ctx->Visual->RGBAflag) {
 | 
			
		||||
      /* Special case: directly write 16-bit depth values */
 | 
			
		||||
      GLint row;
 | 
			
		||||
      for (row = 0; row < height; row++, y++) {
 | 
			
		||||
         const GLdepth *zptr = gl_pixel_addr_in_image(&ctx->Unpack,
 | 
			
		||||
                pixels, width, height, GL_DEPTH_COMPONENT, type, 0, row, 0);
 | 
			
		||||
      GLint j;
 | 
			
		||||
      for (j=0;j<height;j++,y++) {
 | 
			
		||||
         GLdepth *zptr = (GLdepth *) image->Data + j * width;
 | 
			
		||||
         gl_write_rgba_span( ctx, width, x, y, zptr, rgba, GL_BITMAP );
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   else if (type==GL_UNSIGNED_INT && sizeof(GLdepth)==sizeof(GLuint)
 | 
			
		||||
   else if (image->Type==GL_UNSIGNED_INT && sizeof(GLdepth)==sizeof(GLuint)
 | 
			
		||||
       && !bias_or_scale && !zoom && ctx->Visual->RGBAflag) {
 | 
			
		||||
      /* Special case: directly write 32-bit depth values */
 | 
			
		||||
      GLint i, row;
 | 
			
		||||
      GLint i, j;
 | 
			
		||||
      /* Compute shift value to scale 32-bit uints down to depth values. */
 | 
			
		||||
      GLuint shift = 0;
 | 
			
		||||
      GLuint max = MAX_DEPTH;
 | 
			
		||||
      while ((max & 0x80000000) == 0) {
 | 
			
		||||
      while ((max&0x80000000)==0) {
 | 
			
		||||
         max = max << 1;
 | 
			
		||||
         shift++;
 | 
			
		||||
      }
 | 
			
		||||
      for (row = 0; row < height; row++, y++) {
 | 
			
		||||
      for (j=0;j<height;j++,y++) {
 | 
			
		||||
         GLdepth zspan[MAX_WIDTH];
 | 
			
		||||
         const GLdepth *zptr = gl_pixel_addr_in_image(&ctx->Unpack,
 | 
			
		||||
                pixels, width, height, GL_DEPTH_COMPONENT, type, 0, row, 0);
 | 
			
		||||
         GLuint *zptr = (GLuint *) image->Data + j * width;
 | 
			
		||||
         for (i=0;i<width;i++) {
 | 
			
		||||
            zspan[i] = zptr[i] >> shift;
 | 
			
		||||
         }
 | 
			
		||||
@@ -524,30 +629,72 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      /* General case */
 | 
			
		||||
      GLint row;
 | 
			
		||||
      for (row = 0; row < height; row++, y++) {
 | 
			
		||||
      /* General case (slower) */
 | 
			
		||||
      GLint i, j;
 | 
			
		||||
 | 
			
		||||
      /* process image row by row */
 | 
			
		||||
      for (i=0;i<height;i++,y++) {
 | 
			
		||||
         GLfloat depth[MAX_WIDTH];
 | 
			
		||||
         GLdepth zspan[MAX_WIDTH];
 | 
			
		||||
         const GLvoid *src = gl_pixel_addr_in_image(&ctx->Unpack,
 | 
			
		||||
                pixels, width, height, GL_DEPTH_COMPONENT, type, 0, row, 0);
 | 
			
		||||
         _mesa_unpack_depth_span( ctx, drawWidth, zspan, type, src,
 | 
			
		||||
                                  &ctx->Unpack, GL_TRUE );
 | 
			
		||||
 | 
			
		||||
         switch (image->Type) {
 | 
			
		||||
            case GL_UNSIGNED_SHORT:
 | 
			
		||||
               {
 | 
			
		||||
                  GLushort *src = (GLushort *) image->Data + i * width;
 | 
			
		||||
                  for (j=0;j<width;j++) {
 | 
			
		||||
                     depth[j] = USHORT_TO_FLOAT( *src++ );
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
               break;
 | 
			
		||||
            case GL_UNSIGNED_INT:
 | 
			
		||||
               {
 | 
			
		||||
                  GLuint *src = (GLuint *) image->Data + i * width;
 | 
			
		||||
                  for (j=0;j<width;j++) {
 | 
			
		||||
                     depth[j] = UINT_TO_FLOAT( *src++ );
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
               break;
 | 
			
		||||
            case GL_FLOAT:
 | 
			
		||||
               {
 | 
			
		||||
                  GLfloat *src = (GLfloat *) image->Data + i * width;
 | 
			
		||||
                  for (j=0;j<width;j++) {
 | 
			
		||||
                     depth[j] = *src++;
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
               break;
 | 
			
		||||
            default:
 | 
			
		||||
               gl_problem(ctx, "Bad type in draw_depth_pixels");
 | 
			
		||||
               return;
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         /* apply depth scale and bias */
 | 
			
		||||
         if (ctx->Pixel.DepthScale!=1.0 || ctx->Pixel.DepthBias!=0.0) {
 | 
			
		||||
            for (j=0;j<width;j++) {
 | 
			
		||||
               depth[j] = depth[j] * ctx->Pixel.DepthScale + ctx->Pixel.DepthBias;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         /* clamp depth values to [0,1] and convert from floats to integers */
 | 
			
		||||
         for (j=0;j<width;j++) {
 | 
			
		||||
            zspan[j] = (GLdepth) (CLAMP( depth[j], 0.0F, 1.0F ) * DEPTH_SCALE);
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         if (ctx->Visual->RGBAflag) {
 | 
			
		||||
            if (zoom) {
 | 
			
		||||
               gl_write_zoomed_rgba_span(ctx, width, x, y, zspan,
 | 
			
		||||
                                         (const GLubyte (*)[4])rgba, desty);
 | 
			
		||||
               gl_write_zoomed_rgba_span( ctx, width, x, y, zspan,
 | 
			
		||||
                                          (const GLubyte (*)[4])rgba, desty );
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               gl_write_rgba_span(ctx, width, x, y, zspan, rgba, GL_BITMAP);
 | 
			
		||||
               gl_write_rgba_span( ctx, width, x, y, zspan, rgba, GL_BITMAP );
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            if (zoom) {
 | 
			
		||||
               gl_write_zoomed_index_span(ctx, width, x, y, zspan,
 | 
			
		||||
                                          ispan, GL_BITMAP);
 | 
			
		||||
               gl_write_zoomed_index_span( ctx, width, x, y, zspan,
 | 
			
		||||
                                           ispan, GL_BITMAP );
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               gl_write_index_span(ctx, width, x, y, zspan, ispan, GL_BITMAP);
 | 
			
		||||
               gl_write_index_span( ctx, width, x, y, zspan, ispan, GL_BITMAP );
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
@@ -556,71 +703,184 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Simple unpacking parameters: */
 | 
			
		||||
static struct gl_pixelstore_attrib NoUnpack = {
 | 
			
		||||
   1,            /* Alignment */
 | 
			
		||||
   0,            /* RowLength */
 | 
			
		||||
   0,            /* SkipPixels */
 | 
			
		||||
   0,            /* SkipRows */
 | 
			
		||||
   0,            /* ImageHeight */
 | 
			
		||||
   0,            /* SkipImages */
 | 
			
		||||
   GL_FALSE,     /* SwapBytes */
 | 
			
		||||
   GL_FALSE      /* LsbFirst */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Do glDrawPixels of RGBA pixels.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                  GLsizei width, GLsizei height,
 | 
			
		||||
                  GLenum format, GLenum type, const GLvoid *pixels )
 | 
			
		||||
static void draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
                              const struct gl_image *image )
 | 
			
		||||
{
 | 
			
		||||
   const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
   GLint width, height;
 | 
			
		||||
   GLint i, j;
 | 
			
		||||
   const GLint desty = y;
 | 
			
		||||
   GLdepth zspan[MAX_WIDTH];
 | 
			
		||||
   GLboolean quickDraw;
 | 
			
		||||
   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
 | 
			
		||||
 | 
			
		||||
   assert(image);
 | 
			
		||||
 | 
			
		||||
   /* Try an optimized glDrawPixels first */
 | 
			
		||||
   if (simple_DrawPixels(ctx, x, y, width, height, format, type, pixels))
 | 
			
		||||
   if (gl_direct_DrawPixels(ctx, &NoUnpack, image->Width, image->Height,
 | 
			
		||||
                            image->Format, image->Type, image->Data ))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   width = image->Width;
 | 
			
		||||
   height = image->Height;
 | 
			
		||||
 | 
			
		||||
   /* Fragment depth values */
 | 
			
		||||
   if (ctx->Depth.Test) {
 | 
			
		||||
   if (ctx->Depth.Test || ctx->Fog.Enabled) {
 | 
			
		||||
      /* fill in array of z values */
 | 
			
		||||
      GLdepth z = (GLdepth) (ctx->Current.RasterPos[2] * DEPTH_SCALE);
 | 
			
		||||
      GLint i;
 | 
			
		||||
      for (i=0;i<width;i++) {
 | 
			
		||||
	 zspan[i] = z;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   if (ctx->RasterMask == 0 && !zoom
 | 
			
		||||
       && x >= 0 && y >= 0
 | 
			
		||||
       && x + width <= ctx->Buffer->Width
 | 
			
		||||
       && y + height <= ctx->Buffer->Height) {
 | 
			
		||||
   if (ctx->RasterMask==0 && !zoom && x>=0 && y>=0
 | 
			
		||||
       && x+width<=ctx->Buffer->Width && y+height<=ctx->Buffer->Height) {
 | 
			
		||||
      quickDraw = GL_TRUE;
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      quickDraw = GL_FALSE;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /*
 | 
			
		||||
    * General solution
 | 
			
		||||
    */
 | 
			
		||||
   {
 | 
			
		||||
      /* General solution */
 | 
			
		||||
      GLboolean r_flag, g_flag, b_flag, a_flag, l_flag;
 | 
			
		||||
      GLuint components;
 | 
			
		||||
      GLubyte rgba[MAX_WIDTH][4];
 | 
			
		||||
      GLint row;
 | 
			
		||||
      if (width > MAX_WIDTH)
 | 
			
		||||
         width = MAX_WIDTH;
 | 
			
		||||
      for (row = 0; row < height; row++, y++) {
 | 
			
		||||
         const GLvoid *source = gl_pixel_addr_in_image(unpack,
 | 
			
		||||
                  pixels, width, height, format, type, 0, row, 0);
 | 
			
		||||
         _mesa_unpack_ubyte_color_span(ctx, width, GL_RGBA, (void*) rgba,
 | 
			
		||||
                   format, type, source, unpack, GL_TRUE);
 | 
			
		||||
      GLfloat  rf[MAX_WIDTH];
 | 
			
		||||
      GLfloat  gf[MAX_WIDTH];
 | 
			
		||||
      GLfloat  bf[MAX_WIDTH];
 | 
			
		||||
      DEFARRAY(GLfloat,af,MAX_WIDTH);
 | 
			
		||||
      CHECKARRAY(af,return);
 | 
			
		||||
 | 
			
		||||
      r_flag = g_flag = b_flag = a_flag = l_flag = GL_FALSE;
 | 
			
		||||
      switch (image->Format) {
 | 
			
		||||
	 case GL_RED:
 | 
			
		||||
	    r_flag = GL_TRUE;
 | 
			
		||||
	    components = 1;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_GREEN:
 | 
			
		||||
	    g_flag = GL_TRUE;
 | 
			
		||||
	    components = 1;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_BLUE:
 | 
			
		||||
	    b_flag = GL_TRUE;
 | 
			
		||||
	    components = 1;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_ALPHA:
 | 
			
		||||
	    a_flag = GL_TRUE;
 | 
			
		||||
	    components = 1;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_RGB:
 | 
			
		||||
	    r_flag = g_flag = b_flag = GL_TRUE;
 | 
			
		||||
	    components = 3;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_LUMINANCE:
 | 
			
		||||
	    l_flag = GL_TRUE;
 | 
			
		||||
	    components = 1;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_LUMINANCE_ALPHA:
 | 
			
		||||
	    l_flag = a_flag = GL_TRUE;
 | 
			
		||||
	    components = 2;
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_RGBA:
 | 
			
		||||
	    r_flag = g_flag = b_flag = a_flag = GL_TRUE;
 | 
			
		||||
	    components = 4;
 | 
			
		||||
	    break;
 | 
			
		||||
         default:
 | 
			
		||||
            gl_problem(ctx, "Bad type in draw_rgba_pixels");
 | 
			
		||||
            goto cleanup;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* process the image row by row */
 | 
			
		||||
      for (i=0;i<height;i++,y++) {
 | 
			
		||||
	 /* convert to floats */
 | 
			
		||||
	 switch (image->Type) {
 | 
			
		||||
	    case GL_UNSIGNED_BYTE:
 | 
			
		||||
	       {
 | 
			
		||||
		  GLubyte *src = (GLubyte *) image->Data + i * width * components;
 | 
			
		||||
		  for (j=0;j<width;j++) {
 | 
			
		||||
		     if (l_flag) {
 | 
			
		||||
			rf[j] = gf[j] = bf[j] = UBYTE_TO_FLOAT(*src++);
 | 
			
		||||
		     }
 | 
			
		||||
		     else {
 | 
			
		||||
			rf[j] = r_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
 | 
			
		||||
			gf[j] = g_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
 | 
			
		||||
			bf[j] = b_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
 | 
			
		||||
		     }
 | 
			
		||||
		     af[j] = a_flag ? UBYTE_TO_FLOAT(*src++) : 1.0;
 | 
			
		||||
		  }
 | 
			
		||||
	       }
 | 
			
		||||
	       break;
 | 
			
		||||
	    case GL_FLOAT:
 | 
			
		||||
	       {
 | 
			
		||||
		  GLfloat *src = (GLfloat *) image->Data + i * width * components;
 | 
			
		||||
		  for (j=0;j<width;j++) {
 | 
			
		||||
		     if (l_flag) {
 | 
			
		||||
			rf[j] = gf[j] = bf[j] = *src++;
 | 
			
		||||
		     }
 | 
			
		||||
		     else {
 | 
			
		||||
			rf[j] = r_flag ? *src++ : 0.0;
 | 
			
		||||
			gf[j] = g_flag ? *src++ : 0.0;
 | 
			
		||||
			bf[j] = b_flag ? *src++ : 0.0;
 | 
			
		||||
		     }
 | 
			
		||||
		     af[j] = a_flag ? *src++ : 1.0;
 | 
			
		||||
		  }
 | 
			
		||||
	       }
 | 
			
		||||
	       break;
 | 
			
		||||
	    default:
 | 
			
		||||
	       gl_problem( ctx, "draw_rgba_pixels type" );
 | 
			
		||||
               goto cleanup;
 | 
			
		||||
	 }
 | 
			
		||||
 | 
			
		||||
	 /* apply scale and bias */
 | 
			
		||||
	 if (ctx->Pixel.ScaleOrBiasRGBA) {
 | 
			
		||||
            gl_scale_and_bias_color(ctx, width, rf, gf, bf, af);
 | 
			
		||||
	 }
 | 
			
		||||
 | 
			
		||||
	 /* apply pixel mappings */
 | 
			
		||||
	 if (ctx->Pixel.MapColorFlag) {
 | 
			
		||||
            gl_map_color(ctx, width, rf, gf, bf, af);
 | 
			
		||||
	 }
 | 
			
		||||
 | 
			
		||||
	 /* convert to integers */
 | 
			
		||||
	 for (j=0;j<width;j++) {
 | 
			
		||||
	    rgba[j][RCOMP] = (GLint) (rf[j] * 255.0F);
 | 
			
		||||
	    rgba[j][GCOMP] = (GLint) (gf[j] * 255.0F);
 | 
			
		||||
	    rgba[j][BCOMP] = (GLint) (bf[j] * 255.0F);
 | 
			
		||||
	    rgba[j][ACOMP] = (GLint) (af[j] * 255.0F);
 | 
			
		||||
	 }
 | 
			
		||||
 | 
			
		||||
	 /* write to frame buffer */
 | 
			
		||||
         if (quickDraw) {
 | 
			
		||||
            (*ctx->Driver.WriteRGBASpan)( ctx, width, x, y,
 | 
			
		||||
                                          (CONST GLubyte (*)[]) rgba, NULL);
 | 
			
		||||
            (*ctx->Driver.WriteRGBASpan)( ctx, width, x, y, 
 | 
			
		||||
					  (const GLubyte (*)[4])rgba, NULL);
 | 
			
		||||
         }
 | 
			
		||||
         else if (zoom) {
 | 
			
		||||
            gl_write_zoomed_rgba_span( ctx, width, x, y, zspan, 
 | 
			
		||||
				       (CONST GLubyte (*)[]) rgba, desty );
 | 
			
		||||
				       (const GLubyte (*)[4])rgba, desty );
 | 
			
		||||
         }
 | 
			
		||||
         else {
 | 
			
		||||
            gl_write_rgba_span( ctx, (GLuint) width, x, y, zspan, rgba, GL_BITMAP);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
cleanup:
 | 
			
		||||
      UNDEFARRAY(af);
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -629,50 +889,45 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glDrawPixels
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_DrawPixels( GLsizei width, GLsizei height,
 | 
			
		||||
                  GLenum format, GLenum type, const GLvoid *pixels )
 | 
			
		||||
void gl_DrawPixels( GLcontext* ctx, struct gl_image *image )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDrawPixels");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   if (gl_image_error_test( ctx, image, "glDrawPixels" ))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
   if (ctx->RenderMode==GL_RENDER) {
 | 
			
		||||
      GLint x, y;
 | 
			
		||||
      if (!pixels || !ctx->Current.RasterPosValid) {
 | 
			
		||||
      if (!ctx->Current.RasterPosValid) {
 | 
			
		||||
	 return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
 | 
			
		||||
      y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
 | 
			
		||||
 | 
			
		||||
      switch (format) {
 | 
			
		||||
      switch (image->Format) {
 | 
			
		||||
	 case GL_COLOR_INDEX:
 | 
			
		||||
            draw_index_pixels( ctx, x, y, image );
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_STENCIL_INDEX:
 | 
			
		||||
	    draw_stencil_pixels( ctx, x, y, width, height, type, pixels );
 | 
			
		||||
	    draw_stencil_pixels( ctx, x, y, image );
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_DEPTH_COMPONENT:
 | 
			
		||||
	    draw_depth_pixels( ctx, x, y, width, height, type, pixels );
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_COLOR_INDEX:
 | 
			
		||||
            if (ctx->Visual->RGBAflag)
 | 
			
		||||
               draw_index_pixels(ctx, x, y, width, height, type, pixels);
 | 
			
		||||
            else
 | 
			
		||||
               draw_rgba_pixels(ctx, x,y, width, height, format, type, pixels);
 | 
			
		||||
	    draw_depth_pixels( ctx, x, y, image );
 | 
			
		||||
	    break;
 | 
			
		||||
	 case GL_RED:
 | 
			
		||||
	 case GL_GREEN:
 | 
			
		||||
	 case GL_BLUE:
 | 
			
		||||
	 case GL_ALPHA:
 | 
			
		||||
	 case GL_RGB:
 | 
			
		||||
	 case GL_LUMINANCE:
 | 
			
		||||
	 case GL_LUMINANCE_ALPHA:
 | 
			
		||||
	 case GL_RGB:
 | 
			
		||||
         case GL_BGR:
 | 
			
		||||
	 case GL_RGBA:
 | 
			
		||||
	 case GL_BGRA:
 | 
			
		||||
	 case GL_ABGR_EXT:
 | 
			
		||||
            draw_rgba_pixels(ctx, x, y, width, height, format, type, pixels);
 | 
			
		||||
            draw_rgba_pixels( ctx, x, y, image );
 | 
			
		||||
	    break;
 | 
			
		||||
	 default:
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels(format)" );
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels" );
 | 
			
		||||
            return;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: extensions.c,v 1.11 1999/11/11 01:22:26 brianp Exp $ */
 | 
			
		||||
/* $Id: extensions.c,v 1.10.2.3 1999/12/12 18:30:47 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,16 +25,15 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "extensions.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "simple_list.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define MAX_EXT_NAMELEN 80
 | 
			
		||||
@@ -62,7 +61,7 @@ static struct { int enabled; const char *name; } default_extensions[] = {
 | 
			
		||||
   { DEFAULT_ON,     "GL_EXT_texture3D" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_MESA_window_pos" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_MESA_resize_buffers" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_EXT_shared_texture_palette" },
 | 
			
		||||
   { DEFAULT_ON,     "GL_EXT_shared_texture_palette" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_EXT_rescale_normal" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_EXT_abgr" },
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_SGIS_texture_edge_clamp" },
 | 
			
		||||
@@ -72,8 +71,13 @@ static struct { int enabled; const char *name; } default_extensions[] = {
 | 
			
		||||
   { ALWAYS_ENABLED, "GL_NV_texgen_reflection" },
 | 
			
		||||
   { DEFAULT_ON,     "GL_PGI_misc_hints" },
 | 
			
		||||
   { DEFAULT_ON,     "GL_EXT_compiled_vertex_array" },
 | 
			
		||||
   { DEFAULT_OFF,    "GL_EXT_vertex_array_set" },
 | 
			
		||||
   { DEFAULT_ON,     "GL_EXT_clip_volume_hint" },
 | 
			
		||||
   
 | 
			
		||||
   /* These obviously won't make it before 3.3:
 | 
			
		||||
    */
 | 
			
		||||
   { DEFAULT_OFF,    "GL_EXT_vertex_array_set" },
 | 
			
		||||
   { DEFAULT_OFF,    "GL_EXT_texture_env" },
 | 
			
		||||
   { DEFAULT_OFF,    "GL_EXT_fog_coord" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -133,6 +137,24 @@ int gl_extensions_disable( GLcontext *ctx, const char *name )
 | 
			
		||||
}
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Test if the named extension is enabled in this context.
 | 
			
		||||
 */
 | 
			
		||||
GLboolean gl_extension_is_enabled( GLcontext *ctx, const char *name)
 | 
			
		||||
{
 | 
			
		||||
   struct extension *i;
 | 
			
		||||
   foreach( i, ctx->Extensions.ext_list )
 | 
			
		||||
      if (strncmp(i->name, name, MAX_EXT_NAMELEN) == 0) {
 | 
			
		||||
         if (i->enabled)
 | 
			
		||||
            return GL_TRUE;
 | 
			
		||||
         else
 | 
			
		||||
            return GL_FALSE;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
   return GL_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_extensions_dtr( GLcontext *ctx )
 | 
			
		||||
{
 | 
			
		||||
   struct extension *i, *nexti;
 | 
			
		||||
@@ -218,43 +240,409 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
 | 
			
		||||
      gl_function address;
 | 
			
		||||
   };
 | 
			
		||||
   static struct proc procTable[] = {
 | 
			
		||||
      /* OpenGL 1.0 functions */
 | 
			
		||||
      { "glAccum", (gl_function) glAccum },
 | 
			
		||||
      { "glAlphaFunc", (gl_function) glAlphaFunc },
 | 
			
		||||
      { "glBegin", (gl_function) glBegin },
 | 
			
		||||
      { "glBitmap", (gl_function) glBitmap },
 | 
			
		||||
      { "glAccum", (gl_function) glAccum },
 | 
			
		||||
      { "glAlphaFunc", (gl_function) glAlphaFunc },
 | 
			
		||||
      { "glBegin", (gl_function) glBegin },
 | 
			
		||||
      { "glBitmap", (gl_function) glBitmap },
 | 
			
		||||
      { "glBlendFunc", (gl_function) glBlendFunc },
 | 
			
		||||
      { "glCallList", (gl_function) glCallList },
 | 
			
		||||
      { "glCallLists", (gl_function) glCallLists },
 | 
			
		||||
      { "glClear", (gl_function) glClear },
 | 
			
		||||
      { "glClearAccum", (gl_function) glClearAccum },
 | 
			
		||||
      { "glClearColor", (gl_function) glClearColor },
 | 
			
		||||
      { "glClearDepth", (gl_function) glClearDepth },
 | 
			
		||||
      { "glClearIndex", (gl_function) glClearIndex },
 | 
			
		||||
      { "glClearStencil", (gl_function) glClearStencil },
 | 
			
		||||
      { "glClipPlane", (gl_function) glClipPlane },
 | 
			
		||||
      { "glColor3b", (gl_function) glColor3b },
 | 
			
		||||
      { "glColor3bv", (gl_function) glColor3bv },
 | 
			
		||||
      { "glColor3d", (gl_function) glColor3d },
 | 
			
		||||
      { "glColor3dv", (gl_function) glColor3dv },
 | 
			
		||||
      { "glColor3f", (gl_function) glColor3f },
 | 
			
		||||
      { "glColor3fv", (gl_function) glColor3fv },
 | 
			
		||||
      { "glColor3i", (gl_function) glColor3i },
 | 
			
		||||
      { "glColor3iv", (gl_function) glColor3iv },
 | 
			
		||||
      { "glColor3s", (gl_function) glColor3s },
 | 
			
		||||
      { "glColor3sv", (gl_function) glColor3sv },
 | 
			
		||||
      { "glColor3ub", (gl_function) glColor3ub },
 | 
			
		||||
      { "glColor3ubv", (gl_function) glColor3ubv },
 | 
			
		||||
      { "glColor3ui", (gl_function) glColor3ui },
 | 
			
		||||
      { "glColor3uiv", (gl_function) glColor3uiv },
 | 
			
		||||
      { "glColor3us", (gl_function) glColor3us },
 | 
			
		||||
      { "glColor3usv", (gl_function) glColor3usv },
 | 
			
		||||
      { "glColor4b", (gl_function) glColor4b },
 | 
			
		||||
      { "glColor4bv", (gl_function) glColor4bv },
 | 
			
		||||
      { "glColor4d", (gl_function) glColor4d },
 | 
			
		||||
      { "glColor4dv", (gl_function) glColor4dv },
 | 
			
		||||
      { "glColor4f", (gl_function) glColor4f },
 | 
			
		||||
      { "glColor4fv", (gl_function) glColor4fv },
 | 
			
		||||
      { "glColor4i", (gl_function) glColor4i },
 | 
			
		||||
      { "glColor4iv", (gl_function) glColor4iv },
 | 
			
		||||
      { "glColor4s", (gl_function) glColor4s },
 | 
			
		||||
      { "glColor4sv", (gl_function) glColor4sv },
 | 
			
		||||
      { "glColor4ub", (gl_function) glColor4ub },
 | 
			
		||||
      { "glColor4ubv", (gl_function) glColor4ubv },
 | 
			
		||||
      { "glColor4ui", (gl_function) glColor4ui },
 | 
			
		||||
      { "glColor4uiv", (gl_function) glColor4uiv },
 | 
			
		||||
      { "glColor4us", (gl_function) glColor4us },
 | 
			
		||||
      { "glColor4usv", (gl_function) glColor4usv },
 | 
			
		||||
      { "glColorMask", (gl_function) glColorMask },
 | 
			
		||||
      { "glColorMaterial", (gl_function) glColorMaterial },
 | 
			
		||||
      { "glCopyPixels", (gl_function) glCopyPixels },
 | 
			
		||||
      { "glCullFace", (gl_function) glCullFace },
 | 
			
		||||
      { "glDeleteLists", (gl_function) glDeleteLists },
 | 
			
		||||
      { "glDepthFunc", (gl_function) glDepthFunc },
 | 
			
		||||
      { "glDepthMask", (gl_function) glDepthMask },
 | 
			
		||||
      { "glDepthRange", (gl_function) glDepthRange },
 | 
			
		||||
      { "glDisable", (gl_function) glDisable },
 | 
			
		||||
      { "glDrawBuffer", (gl_function) glDrawBuffer },
 | 
			
		||||
      { "glDrawPixels", (gl_function) glDrawPixels },
 | 
			
		||||
      { "glEdgeFlag", (gl_function) glEdgeFlag },
 | 
			
		||||
      { "glEdgeFlagv", (gl_function) glEdgeFlagv },
 | 
			
		||||
      { "glEnable", (gl_function) glEnable },
 | 
			
		||||
      { "glEnd", (gl_function) glEnd },
 | 
			
		||||
      { "glEndList", (gl_function) glEndList },
 | 
			
		||||
      { "glEvalCoord1d", (gl_function) glEvalCoord1d },
 | 
			
		||||
      { "glEvalCoord1dv", (gl_function) glEvalCoord1dv },
 | 
			
		||||
      { "glEvalCoord1f", (gl_function) glEvalCoord1f },
 | 
			
		||||
      { "glEvalCoord1fv", (gl_function) glEvalCoord1fv },
 | 
			
		||||
      { "glEvalCoord2d", (gl_function) glEvalCoord2d },
 | 
			
		||||
      { "glEvalCoord2dv", (gl_function) glEvalCoord2dv },
 | 
			
		||||
      { "glEvalCoord2f", (gl_function) glEvalCoord2f },
 | 
			
		||||
      { "glEvalCoord2fv", (gl_function) glEvalCoord2fv },
 | 
			
		||||
      { "glEvalMesh1", (gl_function) glEvalMesh1 },
 | 
			
		||||
      { "glEvalMesh2", (gl_function) glEvalMesh2 },
 | 
			
		||||
      { "glEvalPoint1", (gl_function) glEvalPoint1 },
 | 
			
		||||
      { "glEvalPoint2", (gl_function) glEvalPoint2 },
 | 
			
		||||
      { "glFeedbackBuffer", (gl_function) glFeedbackBuffer },
 | 
			
		||||
      { "glFinish", (gl_function) glFinish },
 | 
			
		||||
      { "glFlush", (gl_function) glFlush },
 | 
			
		||||
      { "glFogf", (gl_function) glFogf },
 | 
			
		||||
      { "glFogfv", (gl_function) glFogfv },
 | 
			
		||||
      { "glFogi", (gl_function) glFogi },
 | 
			
		||||
      { "glFogiv", (gl_function) glFogiv },
 | 
			
		||||
      { "glFrontFace", (gl_function) glFrontFace },
 | 
			
		||||
      { "glFrustum", (gl_function) glFrustum },
 | 
			
		||||
      { "glGenLists", (gl_function) glGenLists },
 | 
			
		||||
      { "glGetBooleanv", (gl_function) glGetBooleanv },
 | 
			
		||||
      { "glGetClipPlane", (gl_function) glGetClipPlane },
 | 
			
		||||
      { "glGetDoublev", (gl_function) glGetDoublev },
 | 
			
		||||
      { "glGetError", (gl_function) glGetError },
 | 
			
		||||
      { "glGetFloatv", (gl_function) glGetFloatv },
 | 
			
		||||
      { "glGetIntegerv", (gl_function) glGetIntegerv },
 | 
			
		||||
      { "glGetLightfv", (gl_function) glGetLightfv },
 | 
			
		||||
      { "glGetLightiv", (gl_function) glGetLightiv },
 | 
			
		||||
      { "glGetMapdv", (gl_function) glGetMapdv },
 | 
			
		||||
      { "glGetMapfv", (gl_function) glGetMapfv },
 | 
			
		||||
      { "glGetMapiv", (gl_function) glGetMapiv },
 | 
			
		||||
      { "glGetMaterialfv", (gl_function) glGetMaterialfv },
 | 
			
		||||
      { "glGetMaterialiv", (gl_function) glGetMaterialiv },
 | 
			
		||||
      { "glGetPixelMapfv", (gl_function) glGetPixelMapfv },
 | 
			
		||||
      { "glGetPixelMapuiv", (gl_function) glGetPixelMapuiv },
 | 
			
		||||
      { "glGetPixelMapusv", (gl_function) glGetPixelMapusv },
 | 
			
		||||
      { "glGetPolygonStipple", (gl_function) glGetPolygonStipple },
 | 
			
		||||
      { "glGetString", (gl_function) glGetString },
 | 
			
		||||
      { "glGetTexEnvfv", (gl_function) glGetTexEnvfv },
 | 
			
		||||
      { "glGetTexEnviv", (gl_function) glGetTexEnviv },
 | 
			
		||||
      { "glGetTexGendv", (gl_function) glGetTexGendv },
 | 
			
		||||
      { "glGetTexGenfv", (gl_function) glGetTexGenfv },
 | 
			
		||||
      { "glGetTexGeniv", (gl_function) glGetTexGeniv },
 | 
			
		||||
      { "glGetTexImage", (gl_function) glGetTexImage },
 | 
			
		||||
      { "glGetTexLevelParameterfv", (gl_function) glGetTexLevelParameterfv },
 | 
			
		||||
      { "glGetTexLevelParameteriv", (gl_function) glGetTexLevelParameteriv },
 | 
			
		||||
      { "glGetTexParameterfv", (gl_function) glGetTexParameterfv },
 | 
			
		||||
      { "glGetTexParameteriv", (gl_function) glGetTexParameteriv },
 | 
			
		||||
      { "glHint", (gl_function) glHint },
 | 
			
		||||
      { "glIndexMask", (gl_function) glIndexMask },
 | 
			
		||||
      { "glIndexd", (gl_function) glIndexd },
 | 
			
		||||
      { "glIndexdv", (gl_function) glIndexdv },
 | 
			
		||||
      { "glIndexf", (gl_function) glIndexf },
 | 
			
		||||
      { "glIndexfv", (gl_function) glIndexfv },
 | 
			
		||||
      { "glIndexi", (gl_function) glIndexi },
 | 
			
		||||
      { "glIndexiv", (gl_function) glIndexiv },
 | 
			
		||||
      { "glIndexs", (gl_function) glIndexs },
 | 
			
		||||
      { "glIndexsv", (gl_function) glIndexsv },
 | 
			
		||||
      { "glInitNames", (gl_function) glInitNames },
 | 
			
		||||
      { "glIsEnabled", (gl_function) glIsEnabled },
 | 
			
		||||
      { "glIsList", (gl_function) glIsList },
 | 
			
		||||
      { "glLightModelf", (gl_function) glLightModelf },
 | 
			
		||||
      { "glLightModelfv", (gl_function) glLightModelfv },
 | 
			
		||||
      { "glLightModeli", (gl_function) glLightModeli },
 | 
			
		||||
      { "glLightModeliv", (gl_function) glLightModeliv },
 | 
			
		||||
      { "glLightf", (gl_function) glLightf },
 | 
			
		||||
      { "glLightfv", (gl_function) glLightfv },
 | 
			
		||||
      { "glLighti", (gl_function) glLighti },
 | 
			
		||||
      { "glLightiv", (gl_function) glLightiv },
 | 
			
		||||
      { "glLineStipple", (gl_function) glLineStipple },
 | 
			
		||||
      { "glLineWidth", (gl_function) glLineWidth },
 | 
			
		||||
      { "glListBase", (gl_function) glListBase },
 | 
			
		||||
      { "glLoadIdentity", (gl_function) glLoadIdentity },
 | 
			
		||||
      { "glLoadMatrixd", (gl_function) glLoadMatrixd },
 | 
			
		||||
      { "glLoadMatrixf", (gl_function) glLoadMatrixf },
 | 
			
		||||
      { "glLoadName", (gl_function) glLoadName },
 | 
			
		||||
      { "glLogicOp", (gl_function) glLogicOp },
 | 
			
		||||
      { "glMap1d", (gl_function) glMap1d },
 | 
			
		||||
      { "glMap1f", (gl_function) glMap1f },
 | 
			
		||||
      { "glMap2d", (gl_function) glMap2d },
 | 
			
		||||
      { "glMap2f", (gl_function) glMap2f },
 | 
			
		||||
      { "glMapGrid1d", (gl_function) glMapGrid1d },
 | 
			
		||||
      { "glMapGrid1f", (gl_function) glMapGrid1f },
 | 
			
		||||
      { "glMapGrid2d", (gl_function) glMapGrid2d },
 | 
			
		||||
      { "glMapGrid2f", (gl_function) glMapGrid2f },
 | 
			
		||||
      { "glMaterialf", (gl_function) glMaterialf },
 | 
			
		||||
      { "glMaterialfv", (gl_function) glMaterialfv },
 | 
			
		||||
      { "glMateriali", (gl_function) glMateriali },
 | 
			
		||||
      { "glMaterialiv", (gl_function) glMaterialiv },
 | 
			
		||||
      { "glMatrixMode", (gl_function) glMatrixMode },
 | 
			
		||||
      { "glMultMatrixd", (gl_function) glMultMatrixd },
 | 
			
		||||
      { "glMultMatrixf", (gl_function) glMultMatrixf },
 | 
			
		||||
      { "glNewList", (gl_function) glNewList },
 | 
			
		||||
      { "glNormal3b", (gl_function) glNormal3b },
 | 
			
		||||
      { "glNormal3bv", (gl_function) glNormal3bv },
 | 
			
		||||
      { "glNormal3d", (gl_function) glNormal3d },
 | 
			
		||||
      { "glNormal3dv", (gl_function) glNormal3dv },
 | 
			
		||||
      { "glNormal3f", (gl_function) glNormal3f },
 | 
			
		||||
      { "glNormal3fv", (gl_function) glNormal3fv },
 | 
			
		||||
      { "glNormal3i", (gl_function) glNormal3i },
 | 
			
		||||
      { "glNormal3iv", (gl_function) glNormal3iv },
 | 
			
		||||
      { "glNormal3s", (gl_function) glNormal3s },
 | 
			
		||||
      { "glNormal3sv", (gl_function) glNormal3sv },
 | 
			
		||||
      { "glOrtho", (gl_function) glOrtho },
 | 
			
		||||
      { "glPassThrough", (gl_function) glPassThrough },
 | 
			
		||||
      { "glPixelMapfv", (gl_function) glPixelMapfv },
 | 
			
		||||
      { "glPixelMapuiv", (gl_function) glPixelMapuiv },
 | 
			
		||||
      { "glPixelMapusv", (gl_function) glPixelMapusv },
 | 
			
		||||
      { "glPixelStoref", (gl_function) glPixelStoref },
 | 
			
		||||
      { "glPixelStorei", (gl_function) glPixelStorei },
 | 
			
		||||
      { "glPixelTransferf", (gl_function) glPixelTransferf },
 | 
			
		||||
      { "glPixelTransferi", (gl_function) glPixelTransferi },
 | 
			
		||||
      { "glPixelZoom", (gl_function) glPixelZoom },
 | 
			
		||||
      { "glPointSize", (gl_function) glPointSize },
 | 
			
		||||
      { "glPolygonMode", (gl_function) glPolygonMode },
 | 
			
		||||
      { "glPolygonOffset", (gl_function) glPolygonOffset },
 | 
			
		||||
      { "glPolygonStipple", (gl_function) glPolygonStipple },
 | 
			
		||||
      { "glPopAttrib", (gl_function) glPopAttrib },
 | 
			
		||||
      { "glPopMatrix", (gl_function) glPopMatrix },
 | 
			
		||||
      { "glPopName", (gl_function) glPopName },
 | 
			
		||||
      { "glPushAttrib", (gl_function) glPushAttrib },
 | 
			
		||||
      { "glPushMatrix", (gl_function) glPushMatrix },
 | 
			
		||||
      { "glPushName", (gl_function) glPushName },
 | 
			
		||||
      { "glRasterPos2d", (gl_function) glRasterPos2d },
 | 
			
		||||
      { "glRasterPos2dv", (gl_function) glRasterPos2dv },
 | 
			
		||||
      { "glRasterPos2f", (gl_function) glRasterPos2f },
 | 
			
		||||
      { "glRasterPos2fv", (gl_function) glRasterPos2fv },
 | 
			
		||||
      { "glRasterPos2i", (gl_function) glRasterPos2i },
 | 
			
		||||
      { "glRasterPos2iv", (gl_function) glRasterPos2iv },
 | 
			
		||||
      { "glRasterPos2s", (gl_function) glRasterPos2s },
 | 
			
		||||
      { "glRasterPos2sv", (gl_function) glRasterPos2sv },
 | 
			
		||||
      { "glRasterPos3d", (gl_function) glRasterPos3d },
 | 
			
		||||
      { "glRasterPos3dv", (gl_function) glRasterPos3dv },
 | 
			
		||||
      { "glRasterPos3f", (gl_function) glRasterPos3f },
 | 
			
		||||
      { "glRasterPos3fv", (gl_function) glRasterPos3fv },
 | 
			
		||||
      { "glRasterPos3i", (gl_function) glRasterPos3i },
 | 
			
		||||
      { "glRasterPos3iv", (gl_function) glRasterPos3iv },
 | 
			
		||||
      { "glRasterPos3s", (gl_function) glRasterPos3s },
 | 
			
		||||
      { "glRasterPos3sv", (gl_function) glRasterPos3sv },
 | 
			
		||||
      { "glRasterPos4d", (gl_function) glRasterPos4d },
 | 
			
		||||
      { "glRasterPos4dv", (gl_function) glRasterPos4dv },
 | 
			
		||||
      { "glRasterPos4f", (gl_function) glRasterPos4f },
 | 
			
		||||
      { "glRasterPos4fv", (gl_function) glRasterPos4fv },
 | 
			
		||||
      { "glRasterPos4i", (gl_function) glRasterPos4i },
 | 
			
		||||
      { "glRasterPos4iv", (gl_function) glRasterPos4iv },
 | 
			
		||||
      { "glRasterPos4s", (gl_function) glRasterPos4s },
 | 
			
		||||
      { "glRasterPos4sv", (gl_function) glRasterPos4sv },
 | 
			
		||||
      { "glReadBuffer", (gl_function) glReadBuffer },
 | 
			
		||||
      { "glReadPixels", (gl_function) glReadPixels },
 | 
			
		||||
      { "glRectd", (gl_function) glRectd },
 | 
			
		||||
      { "glRectdv", (gl_function) glRectdv },
 | 
			
		||||
      { "glRectf", (gl_function) glRectf },
 | 
			
		||||
      { "glRectfv", (gl_function) glRectfv },
 | 
			
		||||
      { "glRecti", (gl_function) glRecti },
 | 
			
		||||
      { "glRectiv", (gl_function) glRectiv },
 | 
			
		||||
      { "glRects", (gl_function) glRects },
 | 
			
		||||
      { "glRectsv", (gl_function) glRectsv },
 | 
			
		||||
      { "glRenderMode", (gl_function) glRenderMode },
 | 
			
		||||
      { "glRotated", (gl_function) glRotated },
 | 
			
		||||
      { "glRotatef", (gl_function) glRotatef },
 | 
			
		||||
      { "glScaled", (gl_function) glScaled },
 | 
			
		||||
      { "glScalef", (gl_function) glScalef },
 | 
			
		||||
      { "glScissor", (gl_function) glScissor },
 | 
			
		||||
      { "glSelectBuffer", (gl_function) glSelectBuffer },
 | 
			
		||||
      { "glShadeModel", (gl_function) glShadeModel },
 | 
			
		||||
      { "glStencilFunc", (gl_function) glStencilFunc },
 | 
			
		||||
      { "glStencilMask", (gl_function) glStencilMask },
 | 
			
		||||
      { "glStencilOp", (gl_function) glStencilOp },
 | 
			
		||||
      { "glTexCoord1d", (gl_function) glTexCoord1d },
 | 
			
		||||
      { "glTexCoord1dv", (gl_function) glTexCoord1dv },
 | 
			
		||||
      { "glTexCoord1f", (gl_function) glTexCoord1f },
 | 
			
		||||
      { "glTexCoord1fv", (gl_function) glTexCoord1fv },
 | 
			
		||||
      { "glTexCoord1i", (gl_function) glTexCoord1i },
 | 
			
		||||
      { "glTexCoord1iv", (gl_function) glTexCoord1iv },
 | 
			
		||||
      { "glTexCoord1s", (gl_function) glTexCoord1s },
 | 
			
		||||
      { "glTexCoord1sv", (gl_function) glTexCoord1sv },
 | 
			
		||||
      { "glTexCoord2d", (gl_function) glTexCoord2d },
 | 
			
		||||
      { "glTexCoord2dv", (gl_function) glTexCoord2dv },
 | 
			
		||||
      { "glTexCoord2f", (gl_function) glTexCoord2f },
 | 
			
		||||
      { "glTexCoord2fv", (gl_function) glTexCoord2fv },
 | 
			
		||||
      { "glTexCoord2i", (gl_function) glTexCoord2i },
 | 
			
		||||
      { "glTexCoord2iv", (gl_function) glTexCoord2iv },
 | 
			
		||||
      { "glTexCoord2s", (gl_function) glTexCoord2s },
 | 
			
		||||
      { "glTexCoord2sv", (gl_function) glTexCoord2sv },
 | 
			
		||||
      { "glTexCoord3d", (gl_function) glTexCoord3d },
 | 
			
		||||
      { "glTexCoord3dv", (gl_function) glTexCoord3dv },
 | 
			
		||||
      { "glTexCoord3f", (gl_function) glTexCoord3f },
 | 
			
		||||
      { "glTexCoord3fv", (gl_function) glTexCoord3fv },
 | 
			
		||||
      { "glTexCoord3i", (gl_function) glTexCoord3i },
 | 
			
		||||
      { "glTexCoord3iv", (gl_function) glTexCoord3iv },
 | 
			
		||||
      { "glTexCoord3s", (gl_function) glTexCoord3s },
 | 
			
		||||
      { "glTexCoord3sv", (gl_function) glTexCoord3sv },
 | 
			
		||||
      { "glTexCoord4d", (gl_function) glTexCoord4d },
 | 
			
		||||
      { "glTexCoord4dv", (gl_function) glTexCoord4dv },
 | 
			
		||||
      { "glTexCoord4f", (gl_function) glTexCoord4f },
 | 
			
		||||
      { "glTexCoord4fv", (gl_function) glTexCoord4fv },
 | 
			
		||||
      { "glTexCoord4i", (gl_function) glTexCoord4i },
 | 
			
		||||
      { "glTexCoord4iv", (gl_function) glTexCoord4iv },
 | 
			
		||||
      { "glTexCoord4s", (gl_function) glTexCoord4s },
 | 
			
		||||
      { "glTexCoord4sv", (gl_function) glTexCoord4sv },
 | 
			
		||||
      { "glTexEnvf", (gl_function) glTexEnvf },
 | 
			
		||||
      { "glTexEnvfv", (gl_function) glTexEnvfv },
 | 
			
		||||
      { "glTexEnvi", (gl_function) glTexEnvi },
 | 
			
		||||
      { "glTexEnviv", (gl_function) glTexEnviv },
 | 
			
		||||
      { "glTexGend", (gl_function) glTexGend },
 | 
			
		||||
      { "glTexGendv", (gl_function) glTexGendv },
 | 
			
		||||
      { "glTexGenf", (gl_function) glTexGenf },
 | 
			
		||||
      { "glTexGenfv", (gl_function) glTexGenfv },
 | 
			
		||||
      { "glTexGeni", (gl_function) glTexGeni },
 | 
			
		||||
      { "glTexGeniv", (gl_function) glTexGeniv },
 | 
			
		||||
      { "glTexImage1D", (gl_function) glTexImage1D },
 | 
			
		||||
      { "glTexImage2D", (gl_function) glTexImage2D },
 | 
			
		||||
      { "glTexParameterf", (gl_function) glTexParameterf },
 | 
			
		||||
      { "glTexParameterfv", (gl_function) glTexParameterfv },
 | 
			
		||||
      { "glTexParameteri", (gl_function) glTexParameteri },
 | 
			
		||||
      { "glTexParameteriv", (gl_function) glTexParameteriv },
 | 
			
		||||
      { "glTranslated", (gl_function) glTranslated },
 | 
			
		||||
      { "glTranslatef", (gl_function) glTranslatef },
 | 
			
		||||
      { "glVertex2d", (gl_function) glVertex2d },
 | 
			
		||||
      { "glVertex2dv", (gl_function) glVertex2dv },
 | 
			
		||||
      { "glVertex2f", (gl_function) glVertex2f },
 | 
			
		||||
      { "glVertex2fv", (gl_function) glVertex2fv },
 | 
			
		||||
      { "glVertex2i", (gl_function) glVertex2i },
 | 
			
		||||
      { "glVertex2iv", (gl_function) glVertex2iv },
 | 
			
		||||
      { "glVertex2s", (gl_function) glVertex2s },
 | 
			
		||||
      { "glVertex2sv", (gl_function) glVertex2sv },
 | 
			
		||||
      { "glVertex3d", (gl_function) glVertex3d },
 | 
			
		||||
      { "glVertex3dv", (gl_function) glVertex3dv },
 | 
			
		||||
      { "glVertex3f", (gl_function) glVertex3f },
 | 
			
		||||
      { "glVertex3fv", (gl_function) glVertex3fv },
 | 
			
		||||
      { "glVertex3i", (gl_function) glVertex3i },
 | 
			
		||||
      { "glVertex3iv", (gl_function) glVertex3iv },
 | 
			
		||||
      { "glVertex3s", (gl_function) glVertex3s },
 | 
			
		||||
      { "glVertex3sv", (gl_function) glVertex3sv },
 | 
			
		||||
      { "glVertex4d", (gl_function) glVertex4d },
 | 
			
		||||
      { "glVertex4dv", (gl_function) glVertex4dv },
 | 
			
		||||
      { "glVertex4f", (gl_function) glVertex4f },
 | 
			
		||||
      { "glVertex4fv", (gl_function) glVertex4fv },
 | 
			
		||||
      { "glVertex4i", (gl_function) glVertex4i },
 | 
			
		||||
      { "glVertex4iv", (gl_function) glVertex4iv },
 | 
			
		||||
      { "glVertex4s", (gl_function) glVertex4s },
 | 
			
		||||
      { "glVertex4sv", (gl_function) glVertex4sv },
 | 
			
		||||
      { "glViewport", (gl_function) glViewport },
 | 
			
		||||
 | 
			
		||||
      /* OpenGL 1.1 functions */
 | 
			
		||||
      { "glEnableClientState", (gl_function) glEnableClientState },
 | 
			
		||||
      { "glDisableClientState", (gl_function) glDisableClientState },
 | 
			
		||||
      { "glPushClientAttrib", (gl_function) glPushClientAttrib },
 | 
			
		||||
      { "glPopClientAttrib", (gl_function) glPopClientAttrib },
 | 
			
		||||
      { "glIndexub", (gl_function) glIndexub },
 | 
			
		||||
      { "glIndexubv", (gl_function) glIndexubv },
 | 
			
		||||
      { "glVertexPointer", (gl_function) glVertexPointer },
 | 
			
		||||
      { "glNormalPointer", (gl_function) glNormalPointer },
 | 
			
		||||
      { "glColorPointer", (gl_function) glColorPointer },
 | 
			
		||||
      { "glIndexPointer", (gl_function) glIndexPointer },
 | 
			
		||||
      { "glTexCoordPointer", (gl_function) glTexCoordPointer },
 | 
			
		||||
      { "glEdgeFlagPointer", (gl_function) glEdgeFlagPointer },
 | 
			
		||||
      { "glGetPointerv", (gl_function) glGetPointerv },
 | 
			
		||||
      { "glArrayElement", (gl_function) glArrayElement },
 | 
			
		||||
      { "glDrawArrays", (gl_function) glDrawArrays },
 | 
			
		||||
      { "glDrawElements", (gl_function) glDrawElements },
 | 
			
		||||
      { "glInterleavedArrays", (gl_function) glInterleavedArrays },
 | 
			
		||||
      { "glGenTextures", (gl_function) glGenTextures },
 | 
			
		||||
      { "glDeleteTextures", (gl_function) glDeleteTextures },
 | 
			
		||||
      { "glBindTexture", (gl_function) glBindTexture },
 | 
			
		||||
      { "glPrioritizeTextures", (gl_function) glPrioritizeTextures },
 | 
			
		||||
      { "glAreTexturesResident", (gl_function) glAreTexturesResident },
 | 
			
		||||
      { "glIsTexture", (gl_function) glIsTexture },
 | 
			
		||||
      { "glTexSubImage1D", (gl_function) glTexSubImage1D },
 | 
			
		||||
      { "glTexSubImage2D", (gl_function) glTexSubImage2D },
 | 
			
		||||
      { "glArrayElement", (gl_function) glArrayElement },
 | 
			
		||||
      { "glBindTexture", (gl_function) glBindTexture },
 | 
			
		||||
      { "glColorPointer", (gl_function) glColorPointer },
 | 
			
		||||
      { "glCopyTexImage1D", (gl_function) glCopyTexImage1D },
 | 
			
		||||
      { "glCopyTexImage2D", (gl_function) glCopyTexImage2D },
 | 
			
		||||
      { "glCopyTexSubImage1D", (gl_function) glCopyTexSubImage1D },
 | 
			
		||||
      { "glCopyTexSubImage2D", (gl_function) glCopyTexSubImage2D },
 | 
			
		||||
      { "glDeleteTextures", (gl_function) glDeleteTextures },
 | 
			
		||||
      { "glDisableClientState", (gl_function) glDisableClientState },
 | 
			
		||||
      { "glDrawArrays", (gl_function) glDrawArrays },
 | 
			
		||||
      { "glDrawElements", (gl_function) glDrawElements },
 | 
			
		||||
      { "glEdgeFlagPointer", (gl_function) glEdgeFlagPointer },
 | 
			
		||||
      { "glEnableClientState", (gl_function) glEnableClientState },
 | 
			
		||||
      { "glGenTextures", (gl_function) glGenTextures },
 | 
			
		||||
      { "glGetPointerv", (gl_function) glGetPointerv },
 | 
			
		||||
      { "glIndexPointer", (gl_function) glIndexPointer },
 | 
			
		||||
      { "glIndexub", (gl_function) glIndexub },
 | 
			
		||||
      { "glIndexubv", (gl_function) glIndexubv },
 | 
			
		||||
      { "glInterleavedArrays", (gl_function) glInterleavedArrays },
 | 
			
		||||
      { "glIsTexture", (gl_function) glIsTexture },
 | 
			
		||||
      { "glNormalPointer", (gl_function) glNormalPointer },
 | 
			
		||||
      { "glPopClientAttrib", (gl_function) glPopClientAttrib },
 | 
			
		||||
      { "glPrioritizeTextures", (gl_function) glPrioritizeTextures },
 | 
			
		||||
      { "glPushClientAttrib", (gl_function) glPushClientAttrib },
 | 
			
		||||
      { "glTexCoordPointer", (gl_function) glTexCoordPointer },
 | 
			
		||||
      { "glTexSubImage1D", (gl_function) glTexSubImage1D },
 | 
			
		||||
      { "glTexSubImage2D", (gl_function) glTexSubImage2D },
 | 
			
		||||
      { "glVertexPointer", (gl_function) glVertexPointer },
 | 
			
		||||
 | 
			
		||||
      /* OpenGL 1.2 functions */
 | 
			
		||||
      { "glCopyTexSubImage3D", (gl_function) glCopyTexSubImage3D },
 | 
			
		||||
      { "glDrawRangeElements", (gl_function) glDrawRangeElements },
 | 
			
		||||
      { "glTexImage3D", (gl_function) glTexImage3D },
 | 
			
		||||
      { "glTexSubImage3D", (gl_function) glTexSubImage3D },
 | 
			
		||||
      { "glCopyTexSubImage3D", (gl_function) glCopyTexSubImage3D },
 | 
			
		||||
      /* NOTE: 1.2 imaging subset functions not implemented in Mesa */
 | 
			
		||||
 | 
			
		||||
      /* ARB_imaging functions */
 | 
			
		||||
      { "glBlendColor", (gl_function) glBlendColor },
 | 
			
		||||
      { "glBlendEquation", (gl_function) glBlendEquation },
 | 
			
		||||
      { "glColorSubTable", (gl_function) glColorSubTable },
 | 
			
		||||
      { "glColorTable", (gl_function) glColorTable },
 | 
			
		||||
      { "glColorTableParameterfv", (gl_function) glColorTableParameterfv },
 | 
			
		||||
      { "glColorTableParameteriv", (gl_function) glColorTableParameteriv },
 | 
			
		||||
      { "glConvolutionFilter1D", (gl_function) glConvolutionFilter1D },
 | 
			
		||||
      { "glConvolutionFilter2D", (gl_function) glConvolutionFilter2D },
 | 
			
		||||
      { "glConvolutionParameterf", (gl_function) glConvolutionParameterf },
 | 
			
		||||
      { "glConvolutionParameterfv", (gl_function) glConvolutionParameterfv },
 | 
			
		||||
      { "glConvolutionParameteri", (gl_function) glConvolutionParameteri },
 | 
			
		||||
      { "glConvolutionParameteriv", (gl_function) glConvolutionParameteriv },
 | 
			
		||||
      { "glCopyColorSubTable", (gl_function) glCopyColorSubTable },
 | 
			
		||||
      { "glCopyColorTable", (gl_function) glCopyColorTable },
 | 
			
		||||
      { "glCopyConvolutionFilter1D", (gl_function) glCopyConvolutionFilter1D },
 | 
			
		||||
      { "glCopyConvolutionFilter2D", (gl_function) glCopyConvolutionFilter2D },
 | 
			
		||||
      { "glGetColorTable", (gl_function) glGetColorTable },
 | 
			
		||||
      { "glGetColorTableParameterfv", (gl_function) glGetColorTableParameterfv },
 | 
			
		||||
      { "glGetColorTableParameteriv", (gl_function) glGetColorTableParameteriv },
 | 
			
		||||
      { "glGetConvolutionFilter", (gl_function) glGetConvolutionFilter },
 | 
			
		||||
      { "glGetConvolutionParameterfv", (gl_function) glGetConvolutionParameterfv },
 | 
			
		||||
      { "glGetConvolutionParameteriv", (gl_function) glGetConvolutionParameteriv },
 | 
			
		||||
      { "glGetHistogram", (gl_function) glGetHistogram },
 | 
			
		||||
      { "glGetHistogramParameterfv", (gl_function) glGetHistogramParameterfv },
 | 
			
		||||
      { "glGetHistogramParameteriv", (gl_function) glGetHistogramParameteriv },
 | 
			
		||||
      { "glGetMinmax", (gl_function) glGetMinmax },
 | 
			
		||||
      { "glGetMinmaxParameterfv", (gl_function) glGetMinmaxParameterfv },
 | 
			
		||||
      { "glGetMinmaxParameteriv", (gl_function) glGetMinmaxParameteriv },
 | 
			
		||||
      { "glGetSeparableFilter", (gl_function) glGetSeparableFilter },
 | 
			
		||||
      { "glHistogram", (gl_function) glHistogram },
 | 
			
		||||
      { "glMinmax", (gl_function) glMinmax },
 | 
			
		||||
      { "glResetHistogram", (gl_function) glResetHistogram },
 | 
			
		||||
      { "glResetMinmax", (gl_function) glResetMinmax },
 | 
			
		||||
      { "glSeparableFilter2D", (gl_function) glSeparableFilter2D },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_paletted_texture */
 | 
			
		||||
      { "glColorTableEXT", (gl_function) glColorTableEXT },
 | 
			
		||||
      { "glColorSubTableEXT", (gl_function) glColorSubTableEXT },
 | 
			
		||||
      { "glGetColorTableEXT", (gl_function) glGetColorTableEXT },
 | 
			
		||||
      { "glGetColorTableParameterfvEXT", (gl_function) glGetColorTableParameterfvEXT },
 | 
			
		||||
      { "glGetColorTableParameterivEXT", (gl_function) glGetColorTableParameterivEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_compiled_vertex_array */
 | 
			
		||||
      { "glLockArraysEXT", (gl_function) glLockArraysEXT },
 | 
			
		||||
      { "glUnlockArraysEXT", (gl_function) glUnlockArraysEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_point_parameters */
 | 
			
		||||
      { "glPointParameterfEXT", (gl_function) glPointParameterfEXT },
 | 
			
		||||
      { "glPointParameterfvEXT", (gl_function) glPointParameterfvEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_polygon_offset */
 | 
			
		||||
      { "glPolygonOffsetEXT", (gl_function) glPolygonOffsetEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_blend_minmax */
 | 
			
		||||
      { "glBlendEquationEXT", (gl_function) glBlendEquationEXT },
 | 
			
		||||
@@ -262,9 +650,6 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
 | 
			
		||||
      /* GL_EXT_blend_color */
 | 
			
		||||
      { "glBlendColorEXT", (gl_function) glBlendColorEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_polygon_offset */
 | 
			
		||||
      { "glPolygonOffsetEXT", (gl_function) glPolygonOffsetEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_vertex_arrays */
 | 
			
		||||
      { "glVertexPointerEXT", (gl_function) glVertexPointerEXT },
 | 
			
		||||
      { "glNormalPointerEXT", (gl_function) glNormalPointerEXT },
 | 
			
		||||
@@ -289,13 +674,6 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
 | 
			
		||||
      { "glTexSubImage3DEXT", (gl_function) glTexSubImage3DEXT },
 | 
			
		||||
      { "glCopyTexSubImage3DEXT", (gl_function) glCopyTexSubImage3DEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_color_table */
 | 
			
		||||
      { "glColorTableEXT", (gl_function) glColorTableEXT },
 | 
			
		||||
      { "glColorSubTableEXT", (gl_function) glColorSubTableEXT },
 | 
			
		||||
      { "glGetColorTableEXT", (gl_function) glGetColorTableEXT },
 | 
			
		||||
      { "glGetColorTableParameterfvEXT", (gl_function) glGetColorTableParameterfvEXT },
 | 
			
		||||
      { "glGetColorTableParameterivEXT", (gl_function) glGetColorTableParameterivEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_ARB_multitexture */
 | 
			
		||||
      { "glActiveTextureARB", (gl_function) glActiveTextureARB },
 | 
			
		||||
      { "glClientActiveTextureARB", (gl_function) glClientActiveTextureARB },
 | 
			
		||||
@@ -332,10 +710,6 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
 | 
			
		||||
      { "glMultiTexCoord4sARB", (gl_function) glMultiTexCoord4sARB },
 | 
			
		||||
      { "glMultiTexCoord4svARB", (gl_function) glMultiTexCoord4svARB },
 | 
			
		||||
 | 
			
		||||
      /* GL_EXT_point_parameters */
 | 
			
		||||
      { "glPointParameterfEXT", (gl_function) glPointParameterfEXT },
 | 
			
		||||
      { "glPointParameterfvEXT", (gl_function) glPointParameterfvEXT },
 | 
			
		||||
 | 
			
		||||
      /* GL_INGR_blend_func_separate */
 | 
			
		||||
      { "glBlendFuncSeparateINGR", (gl_function) glBlendFuncSeparateINGR },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: extensions.h,v 1.5 1999/10/16 11:30:27 brianp Exp $ */
 | 
			
		||||
/* $Id: extensions.h,v 1.5.2.1 1999/11/20 13:13:50 miklos Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -39,7 +39,7 @@
 | 
			
		||||
 */
 | 
			
		||||
extern int gl_extensions_add( struct gl_context *ctx, int state, 
 | 
			
		||||
			      const char *name, void (*notify)( void ) );
 | 
			
		||||
 | 
			
		||||
extern GLboolean gl_extension_is_enabled( GLcontext *ctx, const char *name);
 | 
			
		||||
extern int gl_extensions_enable( struct gl_context *ctx, const char *name );
 | 
			
		||||
extern int gl_extensions_disable( struct gl_context *ctx, const char *name );
 | 
			
		||||
extern void gl_extensions_dtr( struct gl_context *ctx );
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: fog.c,v 1.4 1999/11/11 01:22:26 brianp Exp $ */
 | 
			
		||||
/* $Id: fog.c,v 1.3.2.1 1999/11/25 16:51:24 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,64 +25,29 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* $XFree86: xc/lib/GL/mesa/src/fog.c,v 1.4 1999/04/04 00:20:24 dawes Exp $ */
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "fog.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "mmath.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
#include "xform.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Fogf(GLenum pname, GLfloat param)
 | 
			
		||||
void gl_Fogfv( GLcontext *ctx, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_Fogfv(pname, ¶m);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Fogi(GLenum pname, GLint param )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat fparam = (GLfloat) param;
 | 
			
		||||
   _mesa_Fogfv(pname, &fparam);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Fogiv(GLenum pname, const GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat p[4];
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_FOG_MODE:
 | 
			
		||||
      case GL_FOG_DENSITY:
 | 
			
		||||
      case GL_FOG_START:
 | 
			
		||||
      case GL_FOG_END:
 | 
			
		||||
      case GL_FOG_INDEX:
 | 
			
		||||
	 p[0] = (GLfloat) *params;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_FOG_COLOR:
 | 
			
		||||
	 p[0] = INT_TO_FLOAT( params[0] );
 | 
			
		||||
	 p[1] = INT_TO_FLOAT( params[1] );
 | 
			
		||||
	 p[2] = INT_TO_FLOAT( params[2] );
 | 
			
		||||
	 p[3] = INT_TO_FLOAT( params[3] );
 | 
			
		||||
	 break;
 | 
			
		||||
      default:
 | 
			
		||||
         /* Error will be caught later in gl_Fogfv */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
   _mesa_Fogfv(pname, p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void 
 | 
			
		||||
_mesa_Fogfv( GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLenum m;
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
@@ -106,23 +71,9 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
 | 
			
		||||
	 }
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_FOG_START:
 | 
			
		||||
#if 0
 | 
			
		||||
         /* Prior to OpenGL 1.1, this was an error */
 | 
			
		||||
         if (*params<0.0F) {
 | 
			
		||||
            gl_error( ctx, GL_INVALID_VALUE, "glFog(GL_FOG_START)" );
 | 
			
		||||
            return;
 | 
			
		||||
         }
 | 
			
		||||
#endif
 | 
			
		||||
	 ctx->Fog.Start = *params;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_FOG_END:
 | 
			
		||||
#if 0
 | 
			
		||||
         /* Prior to OpenGL 1.1, this was an error */
 | 
			
		||||
         if (*params<0.0F) {
 | 
			
		||||
            gl_error( ctx, GL_INVALID_VALUE, "glFog(GL_FOG_END)" );
 | 
			
		||||
            return;
 | 
			
		||||
         }
 | 
			
		||||
#endif
 | 
			
		||||
	 ctx->Fog.End = *params;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_FOG_INDEX:
 | 
			
		||||
@@ -150,9 +101,13 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
 | 
			
		||||
typedef void (*fog_func)( struct vertex_buffer *VB, GLuint side, 
 | 
			
		||||
			  GLubyte flag );
 | 
			
		||||
 | 
			
		||||
typedef void (*fog_coord_func)( struct vertex_buffer *VB, 
 | 
			
		||||
				const GLvector4f *from,
 | 
			
		||||
				GLubyte flag );
 | 
			
		||||
 | 
			
		||||
static fog_func fog_ci_tab[2];
 | 
			
		||||
static fog_func fog_rgba_tab[2];
 | 
			
		||||
static fog_coord_func make_fog_coord_tab[2];
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Compute the fogged color for an array of vertices.
 | 
			
		||||
@@ -206,6 +161,70 @@ void gl_fog_vertices( struct vertex_buffer *VB )
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void check_fog_coords( GLcontext *ctx, struct gl_pipeline_stage *d )
 | 
			
		||||
{
 | 
			
		||||
   d->type = 0;
 | 
			
		||||
 | 
			
		||||
   if (ctx->FogMode==FOG_FRAGMENT)
 | 
			
		||||
   {
 | 
			
		||||
      d->type = PIPE_IMMEDIATE|PIPE_PRECALC;
 | 
			
		||||
      d->inputs = VERT_OBJ_ANY;
 | 
			
		||||
      d->outputs = VERT_FOG_COORD;
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gl_make_fog_coords( struct vertex_buffer *VB )
 | 
			
		||||
{
 | 
			
		||||
   GLcontext *ctx = VB->ctx;
 | 
			
		||||
 | 
			
		||||
   /* If full eye coords weren't required, just calculate the eye Z
 | 
			
		||||
    * values.  
 | 
			
		||||
    */
 | 
			
		||||
   if (!ctx->NeedEyeCoords) {
 | 
			
		||||
      GLfloat *m = ctx->ModelView.m;
 | 
			
		||||
      GLfloat plane[4];
 | 
			
		||||
 | 
			
		||||
      plane[0] = m[2];
 | 
			
		||||
      plane[1] = m[6];
 | 
			
		||||
      plane[2] = m[10];
 | 
			
		||||
      plane[3] = m[14];
 | 
			
		||||
 | 
			
		||||
      gl_dotprod_tab[0][VB->ObjPtr->size](&VB->Eye,
 | 
			
		||||
					  2, /* fill z coordinates */
 | 
			
		||||
					  VB->ObjPtr,
 | 
			
		||||
					  plane,
 | 
			
		||||
					  0 );
 | 
			
		||||
 | 
			
		||||
      make_fog_coord_tab[0]( VB, &VB->Eye, 0 );
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
   {
 | 
			
		||||
      make_fog_coord_tab[0]( VB, VB->EyePtr, 0 );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Drivers that want fog coordinates in VB->Spec[0] alpha, can substitute this
 | 
			
		||||
 * stage for the default PIPE_OP_FOG pipeline stage.
 | 
			
		||||
 */
 | 
			
		||||
struct gl_pipeline_stage gl_fog_coord_stage = {
 | 
			
		||||
   "build fog coordinates",
 | 
			
		||||
   PIPE_OP_FOG,
 | 
			
		||||
   PIPE_PRECALC|PIPE_IMMEDIATE,
 | 
			
		||||
   0,
 | 
			
		||||
   NEW_FOG,
 | 
			
		||||
   NEW_LIGHTING|NEW_RASTER_OPS|NEW_FOG|NEW_MODELVIEW,
 | 
			
		||||
   0, 0,
 | 
			
		||||
   0, 0, 0,
 | 
			
		||||
   check_fog_coords,
 | 
			
		||||
   gl_make_fog_coords 
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Apply fog to an array of RGBA pixels.
 | 
			
		||||
 * Input:  n - number of pixels
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: fog.h,v 1.2 1999/11/11 01:22:26 brianp Exp $ */
 | 
			
		||||
/* $Id: fog.h,v 1.1.1.1.2.1 1999/11/25 16:51:24 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,6 +25,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef FOG_H
 | 
			
		||||
#define FOG_H
 | 
			
		||||
 | 
			
		||||
@@ -32,21 +33,7 @@
 | 
			
		||||
#include "types.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void
 | 
			
		||||
_mesa_Fogf(GLenum pname, GLfloat param);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void
 | 
			
		||||
_mesa_Fogi(GLenum pname, GLint param );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void
 | 
			
		||||
_mesa_Fogfv(GLenum pname, const GLfloat *params );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void
 | 
			
		||||
_mesa_Fogiv(GLenum pname, const GLint *params );
 | 
			
		||||
 | 
			
		||||
extern void gl_Fogfv( GLcontext *ctx, GLenum pname, const GLfloat *params );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void gl_fog_vertices( struct vertex_buffer *VB );
 | 
			
		||||
@@ -58,7 +45,11 @@ extern void gl_fog_rgba_pixels( const GLcontext *ctx,
 | 
			
		||||
extern void gl_fog_ci_pixels( const GLcontext *ctx,
 | 
			
		||||
                              GLuint n, const GLdepth z[], GLuint indx[] );
 | 
			
		||||
 | 
			
		||||
extern void gl_make_fog_coords( struct vertex_buffer *VB );
 | 
			
		||||
 | 
			
		||||
extern struct gl_pipeline_stage gl_fog_coord_stage;
 | 
			
		||||
 | 
			
		||||
extern void gl_init_fog( void );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: get.c,v 1.6 1999/11/11 01:22:26 brianp Exp $ */
 | 
			
		||||
/* $Id: get.c,v 1.5.2.1 1999/12/13 21:58:42 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,10 +25,18 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* $XFree86: xc/lib/GL/mesa/src/get.c,v 1.3 1999/04/04 00:20:25 dawes Exp $ */
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "enable.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
@@ -58,10 +66,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetBooleanv( GLenum pname, GLboolean *params )
 | 
			
		||||
void gl_GetBooleanv( GLcontext *ctx, GLenum pname, GLboolean *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint i;
 | 
			
		||||
   GLuint texUnit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
@@ -742,13 +748,13 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 | 
			
		||||
	 *params = INT_TO_BOOL(0);  /* TODO */
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_1D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_1D );
 | 
			
		||||
         *params = gl_IsEnabled( ctx, GL_TEXTURE_1D );
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_2D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_2D );
 | 
			
		||||
         *params = gl_IsEnabled( ctx, GL_TEXTURE_2D );
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_3D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_3D );
 | 
			
		||||
         *params = gl_IsEnabled( ctx, GL_TEXTURE_3D );
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_BINDING_1D:
 | 
			
		||||
         *params = INT_TO_BOOL(textureUnit->CurrentD[1]->Name);
 | 
			
		||||
@@ -972,10 +978,8 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetDoublev( GLenum pname, GLdouble *params )
 | 
			
		||||
void gl_GetDoublev( GLcontext *ctx, GLenum pname, GLdouble *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint i;
 | 
			
		||||
   GLuint texUnit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
@@ -1656,13 +1660,13 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
 | 
			
		||||
	 *params = 0.0;   /* TODO */
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_1D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1.0 : 0.0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_1D) ? 1.0 : 0.0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_2D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1.0 : 0.0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_2D) ? 1.0 : 0.0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_3D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1.0 : 0.0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_3D) ? 1.0 : 0.0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_BINDING_1D:
 | 
			
		||||
         *params = (GLdouble) textureUnit->CurrentD[1]->Name;
 | 
			
		||||
@@ -1889,10 +1893,8 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetFloatv( GLenum pname, GLfloat *params )
 | 
			
		||||
void gl_GetFloatv( GLcontext *ctx, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint i;
 | 
			
		||||
   GLuint texUnit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
@@ -2570,13 +2572,13 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
 | 
			
		||||
	 *params = 0.0F;  /* TODO */
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_1D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1.0 : 0.0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_1D) ? 1.0 : 0.0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_2D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1.0 : 0.0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_2D) ? 1.0 : 0.0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_3D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1.0 : 0.0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_3D) ? 1.0 : 0.0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_BINDING_1D:
 | 
			
		||||
         *params = (GLfloat) textureUnit->CurrentD[1]->Name;
 | 
			
		||||
@@ -2800,10 +2802,8 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetIntegerv( GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetIntegerv( GLcontext *ctx, GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint i;
 | 
			
		||||
   GLuint texUnit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
@@ -3485,13 +3485,13 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
 | 
			
		||||
	 *params = 0;  /* TODO */
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_1D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1 : 0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_1D) ? 1 : 0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_2D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1 : 0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_2D) ? 1 : 0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_3D:
 | 
			
		||||
         *params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1 : 0;
 | 
			
		||||
         *params = gl_IsEnabled(ctx, GL_TEXTURE_3D) ? 1 : 0;
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_TEXTURE_BINDING_1D:
 | 
			
		||||
         *params = textureUnit->CurrentD[1]->Name;
 | 
			
		||||
@@ -3725,10 +3725,8 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetPointerv( GLenum pname, GLvoid **params )
 | 
			
		||||
void gl_GetPointerv( GLcontext *ctx, GLenum pname, GLvoid **params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint texUnit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   /*GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;*/
 | 
			
		||||
 | 
			
		||||
@@ -3768,13 +3766,11 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const GLubyte *
 | 
			
		||||
_mesa_GetString( GLenum name )
 | 
			
		||||
const GLubyte *gl_GetString( GLcontext *ctx, GLenum name )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   static char result[1000];
 | 
			
		||||
   static char *vendor = "Brian Paul";
 | 
			
		||||
   static char *version = "1.2 Mesa 3.3 beta";
 | 
			
		||||
   static char *version = "1.2 Mesa 3.1";
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glGetString", 0);
 | 
			
		||||
 | 
			
		||||
@@ -3815,24 +3811,3 @@ _mesa_GetString( GLenum name )
 | 
			
		||||
         return NULL;
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Execute a glGetError command
 | 
			
		||||
 */
 | 
			
		||||
GLenum
 | 
			
		||||
_mesa_GetError( void )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
 | 
			
		||||
   GLenum e = ctx->ErrorValue;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL( ctx, "glGetError", (GLenum) 0);
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API)
 | 
			
		||||
      fprintf(stderr, "glGetError <-- %s\n", gl_lookup_enum_by_nr(e));
 | 
			
		||||
 | 
			
		||||
   ctx->ErrorValue = (GLenum) GL_NO_ERROR;
 | 
			
		||||
   return e;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: light.c,v 1.9 1999/11/11 01:22:27 brianp Exp $ */
 | 
			
		||||
/* $Id: light.c,v 1.8.2.1 1999/11/22 19:01:39 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,16 +25,27 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#include <float.h>
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <float.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
#include "light.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "mmath.h"
 | 
			
		||||
#include "simple_list.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
@@ -44,20 +55,21 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ShadeModel( GLenum mode )
 | 
			
		||||
void gl_ShadeModel( GLcontext *ctx, GLenum mode )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glShadeModel");
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE & VERBOSE_API)
 | 
			
		||||
      fprintf(stderr, "glShadeModel %s\n", gl_lookup_enum_by_nr(mode));
 | 
			
		||||
 | 
			
		||||
   if (mode == GL_FLAT || mode == GL_SMOOTH) {
 | 
			
		||||
      if (ctx->Light.ShadeModel!=mode) {
 | 
			
		||||
         ctx->Light.ShadeModel = mode;
 | 
			
		||||
         ctx->TriangleCaps ^= DD_FLATSHADE;
 | 
			
		||||
         ctx->NewState |= NEW_RASTER_OPS;
 | 
			
		||||
      if (ctx->Light.ShadeModel != mode) {
 | 
			
		||||
	 ctx->Light.ShadeModel = mode;
 | 
			
		||||
         if (ctx->Light.ShadeModel == GL_FLAT)
 | 
			
		||||
            ctx->TriangleCaps |= DD_FLATSHADE;
 | 
			
		||||
         else
 | 
			
		||||
            ctx->TriangleCaps &= ~DD_FLATSHADE;
 | 
			
		||||
	 ctx->NewState |= NEW_RASTER_OPS;
 | 
			
		||||
         if (ctx->Driver.ShadeModel) 
 | 
			
		||||
            (*ctx->Driver.ShadeModel)( ctx, mode );
 | 
			
		||||
      }
 | 
			
		||||
@@ -69,25 +81,19 @@ _mesa_ShadeModel( GLenum mode )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Lightf( GLenum light, GLenum pname, GLfloat param )
 | 
			
		||||
void gl_Lightfv( GLcontext *ctx,
 | 
			
		||||
                 GLenum light, GLenum pname, const GLfloat *params,
 | 
			
		||||
                 GLint nparams )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_Lightfv( light, pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint l;
 | 
			
		||||
   GLint nParams;
 | 
			
		||||
 | 
			
		||||
   (void) nparams;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLight");
 | 
			
		||||
 | 
			
		||||
   l = (GLint) (light - GL_LIGHT0);
 | 
			
		||||
 | 
			
		||||
   if (l < 0 || l >= MAX_LIGHTS) {
 | 
			
		||||
   if (l<0 || l>=MAX_LIGHTS) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_ENUM, "glLight" );
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
@@ -95,22 +101,18 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_AMBIENT:
 | 
			
		||||
         COPY_4V( ctx->Light.Light[l].Ambient, params );
 | 
			
		||||
         nParams = 4;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_DIFFUSE:
 | 
			
		||||
         COPY_4V( ctx->Light.Light[l].Diffuse, params );
 | 
			
		||||
         nParams = 4;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SPECULAR:
 | 
			
		||||
         COPY_4V( ctx->Light.Light[l].Specular, params );
 | 
			
		||||
         nParams = 4;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_POSITION:
 | 
			
		||||
	 /* transform position by ModelView matrix */
 | 
			
		||||
	 TRANSFORM_POINT( ctx->Light.Light[l].EyePosition, 
 | 
			
		||||
			  ctx->ModelView.m,
 | 
			
		||||
                          params );
 | 
			
		||||
         nParams = 4;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SPOT_DIRECTION:
 | 
			
		||||
	 /* transform direction by inverse modelview */
 | 
			
		||||
@@ -120,7 +122,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
	 TRANSFORM_NORMAL( ctx->Light.Light[l].EyeDirection,
 | 
			
		||||
			   params,
 | 
			
		||||
			   ctx->ModelView.inv );
 | 
			
		||||
         nParams = 3;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SPOT_EXPONENT:
 | 
			
		||||
         if (params[0]<0.0 || params[0]>128.0) {
 | 
			
		||||
@@ -131,7 +132,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
            ctx->Light.Light[l].SpotExponent = params[0];
 | 
			
		||||
            gl_compute_spot_exp_table( &ctx->Light.Light[l] );
 | 
			
		||||
         }
 | 
			
		||||
         nParams = 1;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SPOT_CUTOFF:
 | 
			
		||||
         if ((params[0]<0.0 || params[0]>90.0) && params[0]!=180.0) {
 | 
			
		||||
@@ -142,7 +142,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
         ctx->Light.Light[l].CosCutoff = cos(params[0]*DEG2RAD);
 | 
			
		||||
         if (ctx->Light.Light[l].CosCutoff < 0) 
 | 
			
		||||
	    ctx->Light.Light[l].CosCutoff = 0;
 | 
			
		||||
         nParams = 1;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_CONSTANT_ATTENUATION:
 | 
			
		||||
         if (params[0]<0.0) {
 | 
			
		||||
@@ -150,7 +149,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
            return;
 | 
			
		||||
         }
 | 
			
		||||
         ctx->Light.Light[l].ConstantAttenuation = params[0];
 | 
			
		||||
         nParams = 1;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_LINEAR_ATTENUATION:
 | 
			
		||||
         if (params[0]<0.0) {
 | 
			
		||||
@@ -158,7 +156,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
            return;
 | 
			
		||||
         }
 | 
			
		||||
         ctx->Light.Light[l].LinearAttenuation = params[0];
 | 
			
		||||
         nParams = 1;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_QUADRATIC_ATTENUATION:
 | 
			
		||||
         if (params[0]<0.0) {
 | 
			
		||||
@@ -166,73 +163,23 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 | 
			
		||||
            return;
 | 
			
		||||
         }
 | 
			
		||||
         ctx->Light.Light[l].QuadraticAttenuation = params[0];
 | 
			
		||||
         nParams = 1;
 | 
			
		||||
         break;
 | 
			
		||||
      default:
 | 
			
		||||
         gl_error( ctx, GL_INVALID_ENUM, "glLight" );
 | 
			
		||||
         return;
 | 
			
		||||
         break;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (ctx->Driver.Lightfv)
 | 
			
		||||
      ctx->Driver.Lightfv( ctx, light, pname, params, nParams );
 | 
			
		||||
      ctx->Driver.Lightfv( ctx, light, pname, params, nparams );
 | 
			
		||||
 | 
			
		||||
   ctx->NewState |= NEW_LIGHTING;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Lighti( GLenum light, GLenum pname, GLint param )
 | 
			
		||||
 | 
			
		||||
void gl_GetLightfv( GLcontext *ctx,
 | 
			
		||||
                    GLenum light, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_Lightiv( light, pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Lightiv( GLenum light, GLenum pname, const GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat fparam[4];
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_AMBIENT:
 | 
			
		||||
      case GL_DIFFUSE:
 | 
			
		||||
      case GL_SPECULAR:
 | 
			
		||||
         fparam[0] = INT_TO_FLOAT( params[0] );
 | 
			
		||||
         fparam[1] = INT_TO_FLOAT( params[1] );
 | 
			
		||||
         fparam[2] = INT_TO_FLOAT( params[2] );
 | 
			
		||||
         fparam[3] = INT_TO_FLOAT( params[3] );
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_POSITION:
 | 
			
		||||
         fparam[0] = (GLfloat) params[0];
 | 
			
		||||
         fparam[1] = (GLfloat) params[1];
 | 
			
		||||
         fparam[2] = (GLfloat) params[2];
 | 
			
		||||
         fparam[3] = (GLfloat) params[3];
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SPOT_DIRECTION:
 | 
			
		||||
         fparam[0] = (GLfloat) params[0];
 | 
			
		||||
         fparam[1] = (GLfloat) params[1];
 | 
			
		||||
         fparam[2] = (GLfloat) params[2];
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SPOT_EXPONENT:
 | 
			
		||||
      case GL_SPOT_CUTOFF:
 | 
			
		||||
      case GL_CONSTANT_ATTENUATION:
 | 
			
		||||
      case GL_LINEAR_ATTENUATION:
 | 
			
		||||
      case GL_QUADRATIC_ATTENUATION:
 | 
			
		||||
         fparam[0] = (GLfloat) params[0];
 | 
			
		||||
         break;
 | 
			
		||||
      default:
 | 
			
		||||
         /* error will be caught later in gl_Lightfv */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   _mesa_Lightfv( light, pname, fparam );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint l = (GLint) (light - GL_LIGHT0);
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetLight");
 | 
			
		||||
@@ -281,10 +228,8 @@ _mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetLightiv( GLenum light, GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetLightiv( GLcontext *ctx, GLenum light, GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint l = (GLint) (light - GL_LIGHT0);
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetLight");
 | 
			
		||||
@@ -352,11 +297,9 @@ _mesa_GetLightiv( GLenum light, GLenum pname, GLint *params )
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_LightModelfv( GLenum pname, const GLfloat *params )
 | 
			
		||||
void gl_LightModelfv( GLcontext *ctx, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLightModelfv");
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLightModel");
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_LIGHT_MODEL_AMBIENT:
 | 
			
		||||
@@ -400,46 +343,6 @@ _mesa_LightModelfv( GLenum pname, const GLfloat *params )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_LightModeliv( GLenum pname, const GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat fparam[4];
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLightModeliv");
 | 
			
		||||
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_LIGHT_MODEL_AMBIENT:
 | 
			
		||||
         fparam[0] = INT_TO_FLOAT( params[0] );
 | 
			
		||||
         fparam[1] = INT_TO_FLOAT( params[1] );
 | 
			
		||||
         fparam[2] = INT_TO_FLOAT( params[2] );
 | 
			
		||||
         fparam[3] = INT_TO_FLOAT( params[3] );
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_LIGHT_MODEL_LOCAL_VIEWER:
 | 
			
		||||
      case GL_LIGHT_MODEL_TWO_SIDE:
 | 
			
		||||
      case GL_LIGHT_MODEL_COLOR_CONTROL:
 | 
			
		||||
         fparam[0] = (GLfloat) params[0];
 | 
			
		||||
         break;
 | 
			
		||||
      default:
 | 
			
		||||
         /* Error will be caught later in gl_LightModelfv */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
   _mesa_LightModelfv( pname, fparam );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_LightModeli( GLenum pname, GLint param )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_LightModeliv( pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_LightModelf( GLenum pname, GLfloat param )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_LightModelfv( pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/********** MATERIAL **********/
 | 
			
		||||
@@ -665,11 +568,11 @@ void gl_update_color_material( GLcontext *ctx,
 | 
			
		||||
   GLfloat tmp[4], color[4];
 | 
			
		||||
 | 
			
		||||
   UBYTE_RGBA_TO_FLOAT_RGBA( color, rgba );
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
   if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
 | 
			
		||||
      fprintf(stderr, "gl_update_color_material, mask %x\n", bitmask);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
   if (bitmask & FRONT_AMBIENT_BIT) {
 | 
			
		||||
      struct gl_material *mat = &ctx->Light.Material[0];
 | 
			
		||||
      SUB_3V( tmp, color, mat->Ambient );
 | 
			
		||||
@@ -772,10 +675,8 @@ void gl_update_color_material( GLcontext *ctx,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ColorMaterial( GLenum face, GLenum mode )
 | 
			
		||||
void gl_ColorMaterial( GLcontext *ctx, GLenum face, GLenum mode )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint bitmask;
 | 
			
		||||
   GLuint legal = (FRONT_EMISSION_BIT | BACK_EMISSION_BIT |
 | 
			
		||||
		   FRONT_SPECULAR_BIT | BACK_SPECULAR_BIT |
 | 
			
		||||
@@ -803,21 +704,12 @@ _mesa_ColorMaterial( GLenum face, GLenum mode )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Materialf( GLenum face, GLenum pname, GLfloat param )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_Materialfv( face, pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* KW:  This is now called directly (ie by name) from the glMaterial* 
 | 
			
		||||
 *      API functions.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
 | 
			
		||||
void gl_Materialfv( GLcontext *ctx,
 | 
			
		||||
                    GLenum face, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct immediate *IM;
 | 
			
		||||
   struct gl_material *mat;
 | 
			
		||||
   GLuint bitmask;
 | 
			
		||||
@@ -843,7 +735,6 @@ _mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
 | 
			
		||||
      IM->MaterialMask[count] = 0;      
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   IM->MaterialMask[count] |= bitmask;
 | 
			
		||||
   mat = IM->Material[count];
 | 
			
		||||
 | 
			
		||||
@@ -892,48 +783,11 @@ _mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Materiali(GLenum face, GLenum pname, GLint param )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_GetMaterialfv( GLcontext *ctx,
 | 
			
		||||
                       GLenum face, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_Materialiv(face, pname, ¶m);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_Materialiv(GLenum face, GLenum pname, const GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat fparam[4];
 | 
			
		||||
   switch (pname) {
 | 
			
		||||
      case GL_AMBIENT:
 | 
			
		||||
      case GL_DIFFUSE:
 | 
			
		||||
      case GL_SPECULAR:
 | 
			
		||||
      case GL_EMISSION:
 | 
			
		||||
      case GL_AMBIENT_AND_DIFFUSE:
 | 
			
		||||
         fparam[0] = INT_TO_FLOAT( params[0] );
 | 
			
		||||
         fparam[1] = INT_TO_FLOAT( params[1] );
 | 
			
		||||
         fparam[2] = INT_TO_FLOAT( params[2] );
 | 
			
		||||
         fparam[3] = INT_TO_FLOAT( params[3] );
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_SHININESS:
 | 
			
		||||
         fparam[0] = (GLfloat) params[0];
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_COLOR_INDEXES:
 | 
			
		||||
         fparam[0] = (GLfloat) params[0];
 | 
			
		||||
         fparam[1] = (GLfloat) params[1];
 | 
			
		||||
         fparam[2] = (GLfloat) params[2];
 | 
			
		||||
         break;
 | 
			
		||||
      default:
 | 
			
		||||
         /* Error will be caught later in gl_Materialfv */
 | 
			
		||||
         ;
 | 
			
		||||
   }
 | 
			
		||||
   _mesa_Materialfv(face, pname, fparam);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint f;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetMaterialfv");
 | 
			
		||||
@@ -976,10 +830,9 @@ _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetMaterialiv( GLcontext *ctx,
 | 
			
		||||
                       GLenum face, GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint f;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetMaterialiv");
 | 
			
		||||
@@ -1268,7 +1121,7 @@ void gl_update_lighting( GLcontext *ctx )
 | 
			
		||||
void gl_compute_light_positions( GLcontext *ctx )
 | 
			
		||||
{
 | 
			
		||||
   struct gl_light *light;
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
   if (ctx->Light.NeedVertices && !ctx->Light.Model.LocalViewer) {
 | 
			
		||||
      GLfloat eye_z[3] = { 0, 0, 1 };
 | 
			
		||||
      if (!ctx->NeedEyeCoords) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: lines.c,v 1.6 1999/11/11 01:22:27 brianp Exp $ */
 | 
			
		||||
/* $Id: lines.c,v 1.5.2.1 1999/11/25 16:51:24 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,10 +25,17 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "depth.h"
 | 
			
		||||
#include "feedback.h"
 | 
			
		||||
@@ -43,10 +50,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_LineWidth( GLfloat width )
 | 
			
		||||
void gl_LineWidth( GLcontext *ctx, GLfloat width )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   if (width<=0.0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glLineWidth" );
 | 
			
		||||
      return;
 | 
			
		||||
@@ -63,10 +68,8 @@ _mesa_LineWidth( GLfloat width )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_LineStipple( GLint factor, GLushort pattern )
 | 
			
		||||
void gl_LineStipple( GLcontext *ctx, GLint factor, GLushort pattern )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLineStipple");
 | 
			
		||||
   ctx->Line.StippleFactor = CLAMP( factor, 1, 256 );
 | 
			
		||||
   ctx->Line.StipplePattern = pattern;
 | 
			
		||||
@@ -1024,8 +1027,7 @@ void gl_set_line_function( GLcontext *ctx )
 | 
			
		||||
      else {
 | 
			
		||||
	 if (ctx->Light.ShadeModel==GL_SMOOTH) {
 | 
			
		||||
	    /* Width==1, non-stippled, smooth-shaded */
 | 
			
		||||
            if (ctx->Depth.Test
 | 
			
		||||
	        || (ctx->Fog.Enabled && ctx->Hint.Fog==GL_NICEST)) {
 | 
			
		||||
            if (ctx->Depth.Test || ctx->FogMode == FOG_FRAGMENT) {
 | 
			
		||||
               if (rgbmode)
 | 
			
		||||
                  ctx->Driver.LineFunc = smooth_rgba_z_line;
 | 
			
		||||
               else
 | 
			
		||||
@@ -1040,8 +1042,7 @@ void gl_set_line_function( GLcontext *ctx )
 | 
			
		||||
	 }
 | 
			
		||||
         else {
 | 
			
		||||
	    /* Width==1, non-stippled, flat-shaded */
 | 
			
		||||
            if (ctx->Depth.Test
 | 
			
		||||
                || (ctx->Fog.Enabled && ctx->Hint.Fog==GL_NICEST)) {
 | 
			
		||||
            if (ctx->Depth.Test || ctx->FogMode == FOG_FRAGMENT) {
 | 
			
		||||
               if (rgbmode)
 | 
			
		||||
                  ctx->Driver.LineFunc = flat_rgba_z_line;
 | 
			
		||||
               else
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: stencil.c,v 1.9 1999/11/11 01:22:27 brianp Exp $ */
 | 
			
		||||
/* $Id: stencil.c,v 1.8.2.1 1999/12/04 21:15:31 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,12 +25,19 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* $XFree86: xc/lib/GL/mesa/src/stencil.c,v 1.3 1999/04/04 00:20:32 dawes Exp $ */
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "pb.h"
 | 
			
		||||
#include "stencil.h"
 | 
			
		||||
#include "types.h"
 | 
			
		||||
@@ -38,15 +45,6 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if STENCIL_BITS==8
 | 
			
		||||
#  define STENCIL_MAX 0xff
 | 
			
		||||
#elif STENCIL_BITS==16
 | 
			
		||||
#  define STENCIL_MAX 0xffff
 | 
			
		||||
#else
 | 
			
		||||
   illegal number of stencil bits
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return the address of a stencil buffer value given the window coords:
 | 
			
		||||
@@ -54,10 +52,8 @@
 | 
			
		||||
#define STENCIL_ADDRESS(X,Y)  (ctx->Buffer->Stencil + ctx->Buffer->Width * (Y) + (X))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ClearStencil( GLint s )
 | 
			
		||||
void gl_ClearStencil( GLcontext *ctx, GLint s )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glClearStencil");
 | 
			
		||||
   ctx->Stencil.Clear = (GLstencil) s;
 | 
			
		||||
 | 
			
		||||
@@ -68,10 +64,8 @@ _mesa_ClearStencil( GLint s )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
 | 
			
		||||
void gl_StencilFunc( GLcontext *ctx, GLenum func, GLint ref, GLuint mask )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint maxref;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glStencilFunc");
 | 
			
		||||
@@ -103,10 +97,8 @@ _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_StencilMask( GLuint mask )
 | 
			
		||||
void gl_StencilMask( GLcontext *ctx, GLuint mask )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glStencilMask");
 | 
			
		||||
   ctx->Stencil.WriteMask = (GLstencil) mask;
 | 
			
		||||
 | 
			
		||||
@@ -117,10 +109,8 @@ _mesa_StencilMask( GLuint mask )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
 | 
			
		||||
void gl_StencilOp( GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glStencilOp");
 | 
			
		||||
   switch (fail) {
 | 
			
		||||
      case GL_KEEP:
 | 
			
		||||
@@ -178,19 +168,14 @@ _mesa_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
 | 
			
		||||
/* Stencil Logic:
 | 
			
		||||
 | 
			
		||||
IF stencil test fails THEN
 | 
			
		||||
   Apply fail-op to stencil value   
 | 
			
		||||
   Don't write the pixel (RGBA,Z)
 | 
			
		||||
   Execute FailOp
 | 
			
		||||
ELSE
 | 
			
		||||
   Write the pixel
 | 
			
		||||
ENDIF
 | 
			
		||||
 | 
			
		||||
Perform Depth Test
 | 
			
		||||
 | 
			
		||||
IF depth test passes OR no depth buffer THEN
 | 
			
		||||
   Execute ZPass
 | 
			
		||||
   Write the pixel
 | 
			
		||||
ELSE
 | 
			
		||||
   Execute ZFail
 | 
			
		||||
   IF doing depth test && depth test fails THEN
 | 
			
		||||
      Apply zfail-op to stencil value   
 | 
			
		||||
      Write RGBA and Z to appropriate buffers
 | 
			
		||||
   ELSE
 | 
			
		||||
      Apply zpass-op to stencil value
 | 
			
		||||
ENDIF
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
@@ -199,21 +184,19 @@ ENDIF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Apply the given stencil operator for each pixel in the span whose
 | 
			
		||||
 * mask flag is set.
 | 
			
		||||
 * Apply the given stencil operator to the array of stencil values.
 | 
			
		||||
 * Don't touch stencil[i] if mask[i] is zero.
 | 
			
		||||
 * Input:  n - number of pixels in the span
 | 
			
		||||
 *         x, y - location of leftmost pixel in the span
 | 
			
		||||
 *         oper - the stencil buffer operator
 | 
			
		||||
 *         stencil - array of stencil values
 | 
			
		||||
 *         mask - array [n] of flag:  1=apply operator, 0=don't apply operator
 | 
			
		||||
 */
 | 
			
		||||
static void apply_stencil_op_to_span( GLcontext *ctx,
 | 
			
		||||
                                      GLuint n, GLint x, GLint y,
 | 
			
		||||
				      GLenum oper, GLubyte mask[] )
 | 
			
		||||
static void apply_stencil_op( GLcontext *ctx, GLenum oper,
 | 
			
		||||
                              GLuint n, GLstencil stencil[], GLubyte mask[] )
 | 
			
		||||
{
 | 
			
		||||
   const GLstencil ref = ctx->Stencil.Ref;
 | 
			
		||||
   const GLstencil wrtmask = ctx->Stencil.WriteMask;
 | 
			
		||||
   const GLstencil invmask = (GLstencil) (~ctx->Stencil.WriteMask);
 | 
			
		||||
   GLstencil *stencil = STENCIL_ADDRESS( x, y );
 | 
			
		||||
   GLuint i;
 | 
			
		||||
 | 
			
		||||
   switch (oper) {
 | 
			
		||||
@@ -352,7 +335,7 @@ static void apply_stencil_op_to_span( GLcontext *ctx,
 | 
			
		||||
	 }
 | 
			
		||||
	 break;
 | 
			
		||||
      default:
 | 
			
		||||
         gl_problem(ctx, "Bad stencilop in apply_stencil_op_to_span");
 | 
			
		||||
         gl_problem(ctx, "Bad stencil op in apply_stencil_op");
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -527,7 +510,9 @@ GLint gl_stencil_span( GLcontext *ctx,
 | 
			
		||||
         return 0;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.FailFunc, fail );
 | 
			
		||||
   if (ctx->Stencil.FailFunc != GL_KEEP) {
 | 
			
		||||
      apply_stencil_op( ctx, ctx->Stencil.FailFunc, n, stencil, fail );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   return (allfail) ? 0 : 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -547,11 +532,13 @@ void gl_depth_stencil_span( GLcontext *ctx,
 | 
			
		||||
                            GLuint n, GLint x, GLint y, const GLdepth z[],
 | 
			
		||||
			    GLubyte mask[] )
 | 
			
		||||
{
 | 
			
		||||
   GLstencil *stencil = STENCIL_ADDRESS(x, y);
 | 
			
		||||
 | 
			
		||||
   if (ctx->Depth.Test==GL_FALSE) {
 | 
			
		||||
      /*
 | 
			
		||||
       * No depth buffer, just apply zpass stencil function to active pixels.
 | 
			
		||||
       */
 | 
			
		||||
      apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.ZPassFunc, mask );
 | 
			
		||||
      apply_stencil_op( ctx, ctx->Stencil.ZPassFunc, n, stencil, mask );
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      /*
 | 
			
		||||
@@ -560,31 +547,36 @@ void gl_depth_stencil_span( GLcontext *ctx,
 | 
			
		||||
      GLubyte passmask[MAX_WIDTH], failmask[MAX_WIDTH], oldmask[MAX_WIDTH];
 | 
			
		||||
      GLuint i;
 | 
			
		||||
 | 
			
		||||
      /* init pass and fail masks to zero, copy mask[] to oldmask[] */
 | 
			
		||||
      for (i=0;i<n;i++) {
 | 
			
		||||
	 passmask[i] = failmask[i] = 0;
 | 
			
		||||
         oldmask[i] = mask[i];
 | 
			
		||||
      }
 | 
			
		||||
      /* save the current mask bits */
 | 
			
		||||
      MEMCPY(oldmask, mask, n * sizeof(GLubyte));
 | 
			
		||||
 | 
			
		||||
      /* apply the depth test */
 | 
			
		||||
      if (ctx->Driver.DepthTestSpan)
 | 
			
		||||
         (*ctx->Driver.DepthTestSpan)( ctx, n, x, y, z, mask );
 | 
			
		||||
 | 
			
		||||
      /* set the stencil pass/fail flags according to result of depth test */
 | 
			
		||||
      /* Set the stencil pass/fail flags according to result of depth testing.
 | 
			
		||||
       * if oldmask[i] == 0 then
 | 
			
		||||
       *    Don't touch the stencil value
 | 
			
		||||
       * else if oldmask[i] and newmask[i] then
 | 
			
		||||
       *    Depth test passed
 | 
			
		||||
       * else
 | 
			
		||||
       *    assert(oldmask[i] && !newmask[i])
 | 
			
		||||
       *    Depth test failed
 | 
			
		||||
       * endif
 | 
			
		||||
       */
 | 
			
		||||
      for (i=0;i<n;i++) {
 | 
			
		||||
         if (oldmask[i]) {
 | 
			
		||||
            if (mask[i]) {
 | 
			
		||||
               passmask[i] = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               failmask[i] = 1;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         ASSERT(mask[i] == 0 || mask[i] == 1);
 | 
			
		||||
         passmask[i] = oldmask[i] & mask[i];
 | 
			
		||||
         failmask[i] = oldmask[i] & (mask[i] ^ 1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* apply the pass and fail operations */
 | 
			
		||||
      apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.ZFailFunc, failmask );
 | 
			
		||||
      apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.ZPassFunc, passmask );
 | 
			
		||||
      if (ctx->Stencil.ZFailFunc != GL_KEEP) {
 | 
			
		||||
         apply_stencil_op( ctx, ctx->Stencil.ZFailFunc, n, stencil, failmask );
 | 
			
		||||
      }
 | 
			
		||||
      if (ctx->Stencil.ZPassFunc != GL_KEEP) {
 | 
			
		||||
         apply_stencil_op( ctx, ctx->Stencil.ZPassFunc, n, stencil, passmask );
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -964,26 +956,27 @@ void gl_depth_stencil_pixels( GLcontext *ctx,
 | 
			
		||||
      GLubyte passmask[PB_SIZE], failmask[PB_SIZE], oldmask[PB_SIZE];
 | 
			
		||||
      GLuint i;
 | 
			
		||||
 | 
			
		||||
      /* init pass and fail masks to zero */
 | 
			
		||||
      for (i=0;i<n;i++) {
 | 
			
		||||
	 passmask[i] = failmask[i] = 0;
 | 
			
		||||
         oldmask[i] = mask[i];
 | 
			
		||||
      }
 | 
			
		||||
      /* save the current mask bits */
 | 
			
		||||
      MEMCPY(oldmask, mask, n * sizeof(GLubyte));
 | 
			
		||||
 | 
			
		||||
      /* apply the depth test */
 | 
			
		||||
      if (ctx->Driver.DepthTestPixels)
 | 
			
		||||
         (*ctx->Driver.DepthTestPixels)( ctx, n, x, y, z, mask );
 | 
			
		||||
 | 
			
		||||
      /* set the stencil pass/fail flags according to result of depth test */
 | 
			
		||||
      /* Set the stencil pass/fail flags according to result of depth testing.
 | 
			
		||||
       * if oldmask[i] == 0 then
 | 
			
		||||
       *    Don't touch the stencil value
 | 
			
		||||
       * else if oldmask[i] and newmask[i] then
 | 
			
		||||
       *    Depth test passed
 | 
			
		||||
       * else
 | 
			
		||||
       *    assert(oldmask[i] && !newmask[i])
 | 
			
		||||
       *    Depth test failed
 | 
			
		||||
       * endif
 | 
			
		||||
       */
 | 
			
		||||
      for (i=0;i<n;i++) {
 | 
			
		||||
         if (oldmask[i]) {
 | 
			
		||||
            if (mask[i]) {
 | 
			
		||||
               passmask[i] = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
               failmask[i] = 1;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         ASSERT(mask[i] == 0 || mask[i] == 1);
 | 
			
		||||
         passmask[i] = oldmask[i] & mask[i];
 | 
			
		||||
         failmask[i] = oldmask[i] & (mask[i] ^ 1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* apply the pass and fail operations */
 | 
			
		||||
@@ -1062,7 +1055,7 @@ void gl_alloc_stencil_buffer( GLcontext *ctx )
 | 
			
		||||
   ctx->Buffer->Stencil = (GLstencil *) MALLOC(buffersize * sizeof(GLstencil));
 | 
			
		||||
   if (!ctx->Buffer->Stencil) {
 | 
			
		||||
      /* out of memory */
 | 
			
		||||
      _mesa_set_enable( ctx, GL_STENCIL_TEST, GL_FALSE );
 | 
			
		||||
      gl_set_enable( ctx, GL_STENCIL_TEST, GL_FALSE );
 | 
			
		||||
      gl_error( ctx, GL_OUT_OF_MEMORY, "gl_alloc_stencil_buffer" );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
@@ -1083,30 +1076,63 @@ void gl_clear_stencil_buffer( GLcontext *ctx )
 | 
			
		||||
 | 
			
		||||
   if (ctx->Scissor.Enabled) {
 | 
			
		||||
      /* clear scissor region only */
 | 
			
		||||
      GLint y;
 | 
			
		||||
      GLint width = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
 | 
			
		||||
      for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
 | 
			
		||||
         GLstencil *ptr = STENCIL_ADDRESS( ctx->Buffer->Xmin, y );
 | 
			
		||||
      const GLint width = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
 | 
			
		||||
      if (ctx->Stencil.WriteMask != STENCIL_MAX) {
 | 
			
		||||
         /* must apply mask to the clear */
 | 
			
		||||
         GLint y;
 | 
			
		||||
         for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
 | 
			
		||||
            GLstencil *ptr = STENCIL_ADDRESS( ctx->Buffer->Xmin, y );
 | 
			
		||||
            GLint x;
 | 
			
		||||
            const GLstencil mask = ctx->Stencil.WriteMask;
 | 
			
		||||
            const GLstencil invMask = ~mask;
 | 
			
		||||
            const GLstencil clearVal = (ctx->Stencil.Clear & mask);
 | 
			
		||||
            for (x = 0; x < width; x++) {
 | 
			
		||||
               ptr[x] = (ptr[x] & invMask) | clearVal;
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* no masking */
 | 
			
		||||
         GLint y;
 | 
			
		||||
         for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
 | 
			
		||||
            GLstencil *ptr = STENCIL_ADDRESS( ctx->Buffer->Xmin, y );
 | 
			
		||||
#if STENCIL_BITS==8
 | 
			
		||||
         MEMSET( ptr, ctx->Stencil.Clear, width * sizeof(GLstencil) );
 | 
			
		||||
            MEMSET( ptr, ctx->Stencil.Clear, width * sizeof(GLstencil) );
 | 
			
		||||
#else
 | 
			
		||||
         GLint x;
 | 
			
		||||
         for (x = 0; x < width; x++)
 | 
			
		||||
            ptr[x] = ctx->Stencil.Clear;
 | 
			
		||||
            GLint x;
 | 
			
		||||
            for (x = 0; x < width; x++)
 | 
			
		||||
               ptr[x] = ctx->Stencil.Clear;
 | 
			
		||||
#endif
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      /* clear whole stencil buffer */
 | 
			
		||||
      if (ctx->Stencil.WriteMask != STENCIL_MAX) {
 | 
			
		||||
         /* must apply mask to the clear */
 | 
			
		||||
         const GLuint n = ctx->Buffer->Width * ctx->Buffer->Height;
 | 
			
		||||
         GLstencil *buffer = ctx->Buffer->Stencil;
 | 
			
		||||
         const GLstencil mask = ctx->Stencil.WriteMask;
 | 
			
		||||
         const GLstencil invMask = ~mask;
 | 
			
		||||
         const GLstencil clearVal = (ctx->Stencil.Clear & mask);
 | 
			
		||||
         GLuint i;
 | 
			
		||||
         for (i = 0; i < n; i++) {
 | 
			
		||||
            buffer[i] = (buffer[i] & invMask) | clearVal;
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
         /* clear whole buffer without masking */
 | 
			
		||||
         const GLuint n = ctx->Buffer->Width * ctx->Buffer->Height;
 | 
			
		||||
         GLstencil *buffer = ctx->Buffer->Stencil;
 | 
			
		||||
 | 
			
		||||
#if STENCIL_BITS==8
 | 
			
		||||
      MEMSET( ctx->Buffer->Stencil, ctx->Stencil.Clear,
 | 
			
		||||
              ctx->Buffer->Width * ctx->Buffer->Height * sizeof(GLstencil) );
 | 
			
		||||
         MEMSET(buffer, ctx->Stencil.Clear, n * sizeof(GLstencil) );
 | 
			
		||||
#else
 | 
			
		||||
      GLuint i;
 | 
			
		||||
      GLuint pixels = ctx->Buffer->Width * ctx->Buffer->Height;
 | 
			
		||||
      GLstencil *buffer = ctx->Buffer->Stencil;
 | 
			
		||||
      for (i = 0; i < pixels; i++)
 | 
			
		||||
         ptr[i] = ctx->Stencil.Clear;
 | 
			
		||||
         GLuint i;
 | 
			
		||||
         for (i = 0; i < n; i++) {
 | 
			
		||||
            buffer[i] = ctx->Stencil.Clear;
 | 
			
		||||
         }
 | 
			
		||||
#endif
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: texobj.c,v 1.8 1999/11/11 01:22:28 brianp Exp $ */
 | 
			
		||||
/* $Id: texobj.c,v 1.7.2.1 1999/12/01 21:07:26 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -23,16 +23,25 @@
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
/* $XFree86: xc/lib/GL/mesa/src/texobj.c,v 1.3 1999/04/04 00:20:32 dawes Exp $ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
#include "hash.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "teximage.h"
 | 
			
		||||
#include "texstate.h"
 | 
			
		||||
#include "texobj.h"
 | 
			
		||||
@@ -56,7 +65,7 @@ gl_alloc_texture_object( struct gl_shared_state *shared, GLuint name,
 | 
			
		||||
{
 | 
			
		||||
   struct gl_texture_object *obj;
 | 
			
		||||
 | 
			
		||||
   assert(dimensions <= 3);
 | 
			
		||||
   ASSERT(dimensions <= 3);
 | 
			
		||||
 | 
			
		||||
   obj = (struct gl_texture_object *)
 | 
			
		||||
                     calloc(1,sizeof(struct gl_texture_object));
 | 
			
		||||
@@ -74,13 +83,13 @@ gl_alloc_texture_object( struct gl_shared_state *shared, GLuint name,
 | 
			
		||||
      obj->BaseLevel = 0;
 | 
			
		||||
      obj->MaxLevel = 1000;
 | 
			
		||||
      obj->MinMagThresh = 0.0F;
 | 
			
		||||
      obj->Palette.Table[0] = 255;
 | 
			
		||||
      obj->Palette.Table[1] = 255;
 | 
			
		||||
      obj->Palette.Table[2] = 255;
 | 
			
		||||
      obj->Palette.Table[3] = 255;
 | 
			
		||||
      obj->Palette.Size = 1;
 | 
			
		||||
      obj->Palette.IntFormat = GL_RGBA;
 | 
			
		||||
      obj->Palette.Format = GL_RGBA;
 | 
			
		||||
      obj->Palette[0] = 255;
 | 
			
		||||
      obj->Palette[1] = 255;
 | 
			
		||||
      obj->Palette[2] = 255;
 | 
			
		||||
      obj->Palette[3] = 255;
 | 
			
		||||
      obj->PaletteSize = 1;
 | 
			
		||||
      obj->PaletteIntFormat = GL_RGBA;
 | 
			
		||||
      obj->PaletteFormat = GL_RGBA;
 | 
			
		||||
 | 
			
		||||
      /* insert into linked list */
 | 
			
		||||
      if (shared) {
 | 
			
		||||
@@ -325,10 +334,8 @@ void gl_test_texture_object_completeness( const GLcontext *ctx, struct gl_textur
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glGenTextures
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_GenTextures( GLsizei n, GLuint *texName )
 | 
			
		||||
void gl_GenTextures( GLcontext *ctx, GLsizei n, GLuint *texName )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint first;
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
@@ -358,10 +365,8 @@ _mesa_GenTextures( GLsizei n, GLuint *texName )
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glDeleteTextures
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_DeleteTextures( GLsizei n, const GLuint *texName)
 | 
			
		||||
void gl_DeleteTextures( GLcontext *ctx, GLsizei n, const GLuint *texName)
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDeleteTextures");
 | 
			
		||||
@@ -404,10 +409,8 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *texName)
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glBindTexture
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_BindTexture( GLenum target, GLuint texName )
 | 
			
		||||
void gl_BindTexture( GLcontext *ctx, GLenum target, GLuint texName )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint unit = ctx->Texture.CurrentUnit;
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
 | 
			
		||||
   struct gl_texture_object *oldTexObj;
 | 
			
		||||
@@ -420,14 +423,21 @@ _mesa_BindTexture( GLenum target, GLuint texName )
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glBindTexture");
 | 
			
		||||
 | 
			
		||||
   dim = (GLuint) (target - GL_TEXTURE_1D);
 | 
			
		||||
 | 
			
		||||
   if (dim < 0 || dim > 2) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_ENUM, "glBindTexture" );
 | 
			
		||||
      return;
 | 
			
		||||
   switch (target) {
 | 
			
		||||
      case GL_TEXTURE_1D:
 | 
			
		||||
         dim = 1;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_2D:
 | 
			
		||||
         dim = 2;
 | 
			
		||||
         break;
 | 
			
		||||
      case GL_TEXTURE_3D:
 | 
			
		||||
         dim = 3;
 | 
			
		||||
         break;
 | 
			
		||||
      default:
 | 
			
		||||
         gl_error( ctx, GL_INVALID_ENUM, "glBindTexture(target)" );
 | 
			
		||||
         return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   dim++;
 | 
			
		||||
   oldTexObj = texUnit->CurrentD[dim];
 | 
			
		||||
 | 
			
		||||
   if (oldTexObj->Name == texName)
 | 
			
		||||
@@ -444,6 +454,7 @@ _mesa_BindTexture( GLenum target, GLuint texName )
 | 
			
		||||
 | 
			
		||||
      if (newTexObj->Dimensions != dim) {
 | 
			
		||||
	 if (newTexObj->Dimensions) {
 | 
			
		||||
            /* the named texture object's dimensions don't match the target */
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_OPERATION, "glBindTexture" );
 | 
			
		||||
	    return;
 | 
			
		||||
	 }
 | 
			
		||||
@@ -498,11 +509,10 @@ _mesa_BindTexture( GLenum target, GLuint texName )
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glPrioritizeTextures
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
 | 
			
		||||
                          const GLclampf *priorities )
 | 
			
		||||
void gl_PrioritizeTextures( GLcontext *ctx,
 | 
			
		||||
                            GLsizei n, const GLuint *texName,
 | 
			
		||||
                            const GLclampf *priorities )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPrioritizeTextures");
 | 
			
		||||
@@ -531,11 +541,10 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glAreTexturesResident 
 | 
			
		||||
 */
 | 
			
		||||
GLboolean
 | 
			
		||||
_mesa_AreTexturesResident( GLsizei n, const GLuint *texName,
 | 
			
		||||
                           GLboolean *residences )
 | 
			
		||||
GLboolean gl_AreTexturesResident( GLcontext *ctx, GLsizei n,
 | 
			
		||||
                                  const GLuint *texName,
 | 
			
		||||
                                  GLboolean *residences )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLboolean resident = GL_TRUE;
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
@@ -574,10 +583,8 @@ _mesa_AreTexturesResident( GLsizei n, const GLuint *texName,
 | 
			
		||||
/*
 | 
			
		||||
 * Execute glIsTexture
 | 
			
		||||
 */
 | 
			
		||||
GLboolean
 | 
			
		||||
_mesa_IsTexture( GLuint texture )
 | 
			
		||||
GLboolean gl_IsTexture( GLcontext *ctx, GLuint texture )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glIsTextures",
 | 
			
		||||
						  GL_FALSE);
 | 
			
		||||
   if (texture>0 && HashLookup(ctx->Shared->TexObjects, texture)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: texstate.c,v 1.5 1999/11/11 01:22:28 brianp Exp $ */
 | 
			
		||||
/* $Id: texstate.c,v 1.4.2.2 1999/11/22 13:54:02 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.3
 | 
			
		||||
 * Version:  3.1
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -25,12 +25,19 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
#include "extensions.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include "texobj.h"
 | 
			
		||||
@@ -60,10 +67,9 @@
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
 | 
			
		||||
void gl_TexEnvfv( GLcontext *ctx,
 | 
			
		||||
                  GLenum target, GLenum pname, const GLfloat *param )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glTexEnv");
 | 
			
		||||
@@ -88,9 +94,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
 | 
			
		||||
	 case GL_BLEND:
 | 
			
		||||
	 case GL_DECAL:
 | 
			
		||||
	 case GL_REPLACE:
 | 
			
		||||
	    /* A small optimization for drivers */ 
 | 
			
		||||
	    if (texUnit->EnvMode == mode)
 | 
			
		||||
               return;
 | 
			
		||||
               return;  /* no change */
 | 
			
		||||
 | 
			
		||||
	    if (MESA_VERBOSE & (VERBOSE_STATE|VERBOSE_TEXTURE))
 | 
			
		||||
	       fprintf(stderr, "glTexEnv: old mode %s, new mode %s\n",
 | 
			
		||||
@@ -123,40 +128,12 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_GetTexEnvfv( GLcontext *ctx,
 | 
			
		||||
                     GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_TexEnvfv( target, pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexEnvi( GLenum target, GLenum pname, GLint param )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat p[4];
 | 
			
		||||
   p[0] = (GLfloat) param;
 | 
			
		||||
   p[1] = p[2] = p[3] = 0.0;
 | 
			
		||||
   _mesa_TexEnvfv( target, pname, p );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat p[4];
 | 
			
		||||
   p[0] = INT_TO_FLOAT( param[0] );
 | 
			
		||||
   p[1] = INT_TO_FLOAT( param[1] );
 | 
			
		||||
   p[2] = INT_TO_FLOAT( param[2] );
 | 
			
		||||
   p[3] = INT_TO_FLOAT( param[3] );
 | 
			
		||||
   _mesa_TexEnvfv( target, pname, p );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
   if (target!=GL_TEXTURE_ENV) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(target)" );
 | 
			
		||||
@@ -175,10 +152,9 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetTexEnviv( GLcontext *ctx,
 | 
			
		||||
                     GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
   if (target!=GL_TEXTURE_ENV) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(target)" );
 | 
			
		||||
@@ -207,17 +183,9 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexParameterf( GLenum target, GLenum pname, GLfloat param )
 | 
			
		||||
void gl_TexParameterfv( GLcontext *ctx,
 | 
			
		||||
                        GLenum target, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_TexParameterfv(target, pname, ¶m);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
   GLenum eparam = (GLenum) (GLint) params[0];
 | 
			
		||||
   struct gl_texture_object *texObj;
 | 
			
		||||
@@ -362,41 +330,20 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexParameteri( GLenum target, GLenum pname, const GLint param )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat fparam[4];
 | 
			
		||||
   fparam[0] = (GLfloat) param;
 | 
			
		||||
   fparam[1] = fparam[2] = fparam[3] = 0.0;
 | 
			
		||||
   _mesa_TexParameterfv(target, pname, fparam);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat fparam[4];
 | 
			
		||||
   fparam[0] = (GLfloat) params[0];
 | 
			
		||||
   fparam[1] = fparam[2] = fparam[3] = 0.0;
 | 
			
		||||
   _mesa_TexParameterfv(target, pname, fparam);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexLevelParameterfv( GLenum target, GLint level,
 | 
			
		||||
                              GLenum pname, GLfloat *params )
 | 
			
		||||
void gl_GetTexLevelParameterfv( GLcontext *ctx, GLenum target, GLint level,
 | 
			
		||||
                                GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GLint iparam;
 | 
			
		||||
   _mesa_GetTexLevelParameteriv( target, level, pname, &iparam );
 | 
			
		||||
   gl_GetTexLevelParameteriv( ctx, target, level, pname, &iparam );
 | 
			
		||||
   *params = (GLfloat) iparam;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexLevelParameteriv( GLenum target, GLint level,
 | 
			
		||||
                              GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetTexLevelParameteriv( GLcontext *ctx, GLenum target, GLint level,
 | 
			
		||||
                                GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
   const struct gl_texture_image *img = NULL;
 | 
			
		||||
   GLuint dimensions;
 | 
			
		||||
@@ -501,10 +448,10 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
 | 
			
		||||
void gl_GetTexParameterfv( GLcontext *ctx,
 | 
			
		||||
                           GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
   struct gl_texture_object *obj;
 | 
			
		||||
 | 
			
		||||
@@ -569,10 +516,9 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetTexParameteriv( GLcontext *ctx,
 | 
			
		||||
                           GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
 | 
			
		||||
   struct gl_texture_object *obj;
 | 
			
		||||
 | 
			
		||||
@@ -651,10 +597,9 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
 | 
			
		||||
/**********************************************************************/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
 | 
			
		||||
void gl_TexGenfv( GLcontext *ctx,
 | 
			
		||||
                  GLenum coord, GLenum pname, const GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint tUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glTexGenfv");
 | 
			
		||||
@@ -665,7 +610,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
 | 
			
		||||
	      gl_lookup_enum_by_nr(pname),
 | 
			
		||||
	      *(int *)params);
 | 
			
		||||
 | 
			
		||||
   switch (coord) {
 | 
			
		||||
   switch( coord ) {
 | 
			
		||||
      case GL_S:
 | 
			
		||||
         if (pname==GL_TEXTURE_GEN_MODE) {
 | 
			
		||||
	    GLenum mode = (GLenum) (GLint) *params;
 | 
			
		||||
@@ -851,57 +796,10 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
 | 
			
		||||
 | 
			
		||||
void gl_GetTexGendv( GLcontext *ctx,
 | 
			
		||||
                     GLenum coord, GLenum pname, GLdouble *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat p[4];
 | 
			
		||||
   p[0] = params[0];
 | 
			
		||||
   p[1] = params[1];
 | 
			
		||||
   p[2] = params[2];
 | 
			
		||||
   p[3] = params[3];
 | 
			
		||||
   _mesa_TexGenfv(coord, pname, p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat p = (GLfloat) param;
 | 
			
		||||
   _mesa_TexGenfv( coord, pname, &p );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat p[4];
 | 
			
		||||
   p[0] = params[0];
 | 
			
		||||
   p[1] = params[1];
 | 
			
		||||
   p[2] = params[2];
 | 
			
		||||
   p[3] = params[3];
 | 
			
		||||
   _mesa_TexGenfv( coord, pname, p );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_TexGenfv(coord, pname, ¶m);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexGeni( GLenum coord, GLenum pname, GLint param )
 | 
			
		||||
{
 | 
			
		||||
   _mesa_TexGeniv( coord, pname, ¶m );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint tUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
 | 
			
		||||
 | 
			
		||||
@@ -976,10 +874,9 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
 | 
			
		||||
void gl_GetTexGenfv( GLcontext *ctx,
 | 
			
		||||
                     GLenum coord, GLenum pname, GLfloat *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint tUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
 | 
			
		||||
 | 
			
		||||
@@ -1054,10 +951,9 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
void gl_GetTexGeniv( GLcontext *ctx,
 | 
			
		||||
                     GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint tUnit = ctx->Texture.CurrentTransformUnit;
 | 
			
		||||
   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
 | 
			
		||||
 | 
			
		||||
@@ -1087,7 +983,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_T:
 | 
			
		||||
         if (pname==GL_TEXTURE_GEN_MODE) {
 | 
			
		||||
            params[0] = texUnit->GenModeT;
 | 
			
		||||
            params[0] = (GLint) texUnit->GenModeT;
 | 
			
		||||
	 }
 | 
			
		||||
	 else if (pname==GL_OBJECT_PLANE) {
 | 
			
		||||
            params[0] = (GLint) texUnit->ObjectPlaneT[0];
 | 
			
		||||
@@ -1108,7 +1004,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_R:
 | 
			
		||||
         if (pname==GL_TEXTURE_GEN_MODE) {
 | 
			
		||||
            params[0] = texUnit->GenModeR;
 | 
			
		||||
            params[0] = (GLint) texUnit->GenModeR;
 | 
			
		||||
	 }
 | 
			
		||||
	 else if (pname==GL_OBJECT_PLANE) {
 | 
			
		||||
            params[0] = (GLint) texUnit->ObjectPlaneR[0];
 | 
			
		||||
@@ -1129,7 +1025,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
	 break;
 | 
			
		||||
      case GL_Q:
 | 
			
		||||
         if (pname==GL_TEXTURE_GEN_MODE) {
 | 
			
		||||
            params[0] = texUnit->GenModeQ;
 | 
			
		||||
            params[0] = (GLint) texUnit->GenModeQ;
 | 
			
		||||
	 }
 | 
			
		||||
	 else if (pname==GL_OBJECT_PLANE) {
 | 
			
		||||
            params[0] = (GLint) texUnit->ObjectPlaneQ[0];
 | 
			
		||||
@@ -1142,7 +1038,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
            params[1] = (GLint) texUnit->EyePlaneQ[1];
 | 
			
		||||
            params[2] = (GLint) texUnit->EyePlaneQ[2];
 | 
			
		||||
            params[3] = (GLint) texUnit->EyePlaneQ[3];
 | 
			
		||||
         }
 | 
			
		||||
	 }
 | 
			
		||||
	 else {
 | 
			
		||||
	    gl_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" );
 | 
			
		||||
	    return;
 | 
			
		||||
@@ -1156,10 +1052,8 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* GL_ARB_multitexture */
 | 
			
		||||
void
 | 
			
		||||
_mesa_ActiveTextureARB( GLenum target )
 | 
			
		||||
void gl_ActiveTexture( GLcontext *ctx, GLenum target )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint maxUnits = ctx->Const.MaxTextureUnits;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END( ctx, "glActiveTextureARB" );
 | 
			
		||||
@@ -1183,10 +1077,8 @@ _mesa_ActiveTextureARB( GLenum target )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* GL_ARB_multitexture */
 | 
			
		||||
void
 | 
			
		||||
_mesa_ClientActiveTextureARB( GLenum target )
 | 
			
		||||
void gl_ClientActiveTexture( GLcontext *ctx, GLenum target )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLint maxUnits = ctx->Const.MaxTextureUnits;
 | 
			
		||||
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END( ctx, "glClientActiveTextureARB" );
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: varray.c,v 1.14 1999/11/11 01:22:28 brianp Exp $ */
 | 
			
		||||
/* $Id: varray.c,v 1.13.2.3 1999/12/01 12:18:47 keithw Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
@@ -27,8 +27,15 @@
 | 
			
		||||
#ifdef PC_HEADER
 | 
			
		||||
#include "all.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "glheader.h"
 | 
			
		||||
#ifndef XFree86Server
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "context.h"
 | 
			
		||||
#include "api.h"
 | 
			
		||||
#include "cva.h"
 | 
			
		||||
#include "enable.h"
 | 
			
		||||
#include "enums.h"
 | 
			
		||||
@@ -47,14 +54,24 @@
 | 
			
		||||
#include "vbindirect.h"
 | 
			
		||||
#include "vbxform.h"
 | 
			
		||||
#include "xform.h"
 | 
			
		||||
#ifdef XFree86Server
 | 
			
		||||
#include "GL/xf86glx.h"
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server) && !defined(GLX_USE_DLOPEN)
 | 
			
		||||
#define NEED_MESA_FUNCS_WRAPPED
 | 
			
		||||
#include "mesa_api.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
void GLAPIENTRY glVertexPointer(CTX_ARG GLint size, GLenum type, GLsizei stride,
 | 
			
		||||
                                 const GLvoid *ptr )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
   
 | 
			
		||||
   if (size<2 || size>4) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" );
 | 
			
		||||
@@ -103,10 +120,13 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 | 
			
		||||
void GLAPIENTRY glNormalPointer(CTX_ARG GLenum type, GLsizei stride,
 | 
			
		||||
                                 const GLvoid *ptr )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
   
 | 
			
		||||
   if (stride<0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" );
 | 
			
		||||
@@ -152,11 +172,13 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
void GLAPIENTRY glColorPointer(CTX_ARG GLint size, GLenum type, GLsizei stride,
 | 
			
		||||
                                const GLvoid *ptr )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
   if (size<3 || size>4) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glColorPointer(size)" );
 | 
			
		||||
      return;
 | 
			
		||||
@@ -215,10 +237,13 @@ _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
void GLAPIENTRY glIndexPointer(CTX_ARG GLenum type, GLsizei stride,
 | 
			
		||||
                                const GLvoid *ptr )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
   
 | 
			
		||||
   if (stride<0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" );
 | 
			
		||||
@@ -259,12 +284,16 @@ _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 | 
			
		||||
void GLAPIENTRY glTexCoordPointer(CTX_ARG GLint size, GLenum type,
 | 
			
		||||
                                   GLsizei stride, const GLvoid *ptr )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLuint texUnit;
 | 
			
		||||
   
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
   
 | 
			
		||||
   texUnit = ctx->Array.ActiveTexture;
 | 
			
		||||
 | 
			
		||||
   if (size<1 || size>4) {
 | 
			
		||||
@@ -317,11 +346,14 @@ _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_EdgeFlagPointer(GLsizei stride, const void *vptr)
 | 
			
		||||
void GLAPIENTRY glEdgeFlagPointer(CTX_ARG GLsizei stride, const void *vptr )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   const GLboolean *ptr = (GLboolean *)vptr;
 | 
			
		||||
   
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
 | 
			
		||||
   if (stride<0) {
 | 
			
		||||
      gl_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" );
 | 
			
		||||
@@ -438,42 +470,8 @@ void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Enough funny business going on in here it might be quicker to use a
 | 
			
		||||
 * function pointer.
 | 
			
		||||
 */
 | 
			
		||||
#define ARRAY_ELT( IM, i )					\
 | 
			
		||||
{								\
 | 
			
		||||
   GLuint count = IM->Count;					\
 | 
			
		||||
   IM->Elt[count] = i;						\
 | 
			
		||||
   IM->Flag[count] = ((IM->Flag[count] & IM->ArrayAndFlags) |	\
 | 
			
		||||
		      VERT_ELT);				\
 | 
			
		||||
   IM->FlushElt |= IM->ArrayEltFlush;				\
 | 
			
		||||
   IM->Count = count += IM->ArrayIncr;				\
 | 
			
		||||
   if (count == VB_MAX)						\
 | 
			
		||||
      IM->maybe_transform_vb( IM );				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_ArrayElement( GLint i )
 | 
			
		||||
void gl_DrawArrays( GLcontext *ctx, GLenum mode, GLint start, GLsizei count )
 | 
			
		||||
{
 | 
			
		||||
   GET_IMMEDIATE;
 | 
			
		||||
   ARRAY_ELT( IM, i );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_ArrayElement( GLcontext *CC, GLint i )
 | 
			
		||||
{
 | 
			
		||||
   struct immediate *im = CC->input;
 | 
			
		||||
   ARRAY_ELT( im, i );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   struct vertex_buffer *VB = ctx->VB;
 | 
			
		||||
   GLint i;
 | 
			
		||||
 | 
			
		||||
@@ -505,14 +503,23 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
 | 
			
		||||
       * rendering to keep it turned on.
 | 
			
		||||
       */
 | 
			
		||||
      relock = ctx->CompileCVAFlag;
 | 
			
		||||
      ctx->CompileCVAFlag = 0;
 | 
			
		||||
 | 
			
		||||
      if (!elt->pipeline_valid || relock)
 | 
			
		||||
      if (relock) {
 | 
			
		||||
	 ctx->CompileCVAFlag = 0;
 | 
			
		||||
	 elt->pipeline_valid = 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!elt->pipeline_valid)
 | 
			
		||||
	 gl_build_immediate_pipeline( ctx );
 | 
			
		||||
 | 
			
		||||
      required = elt->inputs;
 | 
			
		||||
      fallback = (elt->inputs & ~ctx->Array.Summary);
 | 
			
		||||
 | 
			
		||||
      /* The translate function doesn't do anything about size.  It
 | 
			
		||||
       * just ensures that type and stride come out right.
 | 
			
		||||
       */
 | 
			
		||||
      IM->v.Obj.size = ctx->Array.Vertex.Size;
 | 
			
		||||
      
 | 
			
		||||
      if (required & VERT_RGBA) 
 | 
			
		||||
      {
 | 
			
		||||
	 Color = &ctx->Array.Color;
 | 
			
		||||
@@ -585,7 +592,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
 | 
			
		||||
      VB->NextPrimitive = IM->NextPrimitive; 
 | 
			
		||||
      VB->MaterialMask = IM->MaterialMask;
 | 
			
		||||
      VB->Material = IM->Material;
 | 
			
		||||
      VB->BoundsPtr = 0;
 | 
			
		||||
      VB->BoundsPtr = 0;      
 | 
			
		||||
 | 
			
		||||
      while (remaining > 0) {
 | 
			
		||||
         GLint vbspace = VB_MAX - VB_START;
 | 
			
		||||
@@ -669,6 +676,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
 | 
			
		||||
 | 
			
		||||
	 VB->NextPrimitive[VB->CopyStart] = VB->Count;
 | 
			
		||||
	 VB->Primitive[VB->CopyStart] = mode;
 | 
			
		||||
	 ctx->Array.Flag[count] |= VERT_END_VB;
 | 
			
		||||
 | 
			
		||||
         /* Transform and render.
 | 
			
		||||
	  */
 | 
			
		||||
@@ -682,7 +690,12 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
 | 
			
		||||
         remaining -= n;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      ctx->CompileCVAFlag = relock;
 | 
			
		||||
      gl_reset_input( ctx );
 | 
			
		||||
 | 
			
		||||
      if (relock) {
 | 
			
		||||
	 ctx->CompileCVAFlag = relock;
 | 
			
		||||
	 elt->pipeline_valid = 0;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   else if (ctx->Array.Vertex.Enabled) 
 | 
			
		||||
   {
 | 
			
		||||
@@ -783,13 +796,16 @@ static GLuint natural_stride[0x10] =
 | 
			
		||||
   0				/* f */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
 | 
			
		||||
void GLAPIENTRY glDrawElements(CTX_ARG GLenum mode, GLsizei count,
 | 
			
		||||
                                GLenum type, const GLvoid *indices )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   struct gl_cva *cva;
 | 
			
		||||
      
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
 | 
			
		||||
   cva = &ctx->CVA;
 | 
			
		||||
   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDrawElements");
 | 
			
		||||
 | 
			
		||||
@@ -899,10 +915,10 @@ _mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indice
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 | 
			
		||||
void GLAPIENTRY glInterleavedArrays(CTX_ARG GLenum format, GLsizei stride,
 | 
			
		||||
                                     const GLvoid *pointer )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GLboolean tflag, cflag, nflag;  /* enable/disable flags */
 | 
			
		||||
   GLint tcomps, ccomps, vcomps;   /* components per texcoord, color, vertex */
 | 
			
		||||
 | 
			
		||||
@@ -912,6 +928,11 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 | 
			
		||||
   GLint c, f;
 | 
			
		||||
   GLint coordUnitSave;
 | 
			
		||||
   
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   f = sizeof(GLfloat);
 | 
			
		||||
   c = f * ((4*sizeof(GLubyte) + (f-1)) / f);
 | 
			
		||||
 | 
			
		||||
@@ -1035,8 +1056,8 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 | 
			
		||||
      stride = defstride;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   _mesa_DisableClientState( GL_EDGE_FLAG_ARRAY );
 | 
			
		||||
   _mesa_DisableClientState( GL_INDEX_ARRAY );
 | 
			
		||||
   gl_DisableClientState( ctx, GL_EDGE_FLAG_ARRAY );
 | 
			
		||||
   gl_DisableClientState( ctx, GL_INDEX_ARRAY );
 | 
			
		||||
 | 
			
		||||
   /* Texcoords */
 | 
			
		||||
   coordUnitSave = ctx->Array.ActiveTexture;
 | 
			
		||||
@@ -1044,61 +1065,63 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 | 
			
		||||
      GLint i;
 | 
			
		||||
      GLint factor = ctx->Array.TexCoordInterleaveFactor;
 | 
			
		||||
      for (i = 0; i < factor; i++) {
 | 
			
		||||
         _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
 | 
			
		||||
         _mesa_EnableClientState( GL_TEXTURE_COORD_ARRAY );
 | 
			
		||||
         glTexCoordPointer( tcomps, GL_FLOAT, stride,
 | 
			
		||||
         gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + i) );
 | 
			
		||||
         gl_EnableClientState( ctx, GL_TEXTURE_COORD_ARRAY );
 | 
			
		||||
         glTexCoordPointer(CTX_PRM  tcomps, GL_FLOAT, stride,
 | 
			
		||||
                             (GLubyte *) pointer + i * coffset );
 | 
			
		||||
      }
 | 
			
		||||
      for (i = factor; i < ctx->Const.MaxTextureUnits; i++) {
 | 
			
		||||
         _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
 | 
			
		||||
         _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY );
 | 
			
		||||
         gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + i) );
 | 
			
		||||
         gl_DisableClientState( ctx, GL_TEXTURE_COORD_ARRAY );
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      GLint i;
 | 
			
		||||
      for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
 | 
			
		||||
         _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
 | 
			
		||||
         _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY );
 | 
			
		||||
         gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + i) );
 | 
			
		||||
         gl_DisableClientState( ctx, GL_TEXTURE_COORD_ARRAY );
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   /* Restore texture coordinate unit index */
 | 
			
		||||
   _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + coordUnitSave) );
 | 
			
		||||
   gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + coordUnitSave) );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   /* Color */
 | 
			
		||||
   if (cflag) {
 | 
			
		||||
      _mesa_EnableClientState( GL_COLOR_ARRAY );
 | 
			
		||||
      glColorPointer( ccomps, ctype, stride,
 | 
			
		||||
      gl_EnableClientState( ctx, GL_COLOR_ARRAY );
 | 
			
		||||
      glColorPointer(CTX_PRM ccomps, ctype, stride,
 | 
			
		||||
                       (GLubyte*) pointer + coffset );
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      _mesa_DisableClientState( GL_COLOR_ARRAY );
 | 
			
		||||
      gl_DisableClientState( ctx, GL_COLOR_ARRAY );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   /* Normals */
 | 
			
		||||
   if (nflag) {
 | 
			
		||||
      _mesa_EnableClientState( GL_NORMAL_ARRAY );
 | 
			
		||||
      glNormalPointer( GL_FLOAT, stride,
 | 
			
		||||
      gl_EnableClientState( ctx, GL_NORMAL_ARRAY );
 | 
			
		||||
      glNormalPointer(CTX_PRM GL_FLOAT, stride,
 | 
			
		||||
                        (GLubyte*) pointer + noffset );
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      _mesa_DisableClientState( GL_NORMAL_ARRAY );
 | 
			
		||||
      gl_DisableClientState( ctx, GL_NORMAL_ARRAY );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   _mesa_EnableClientState( GL_VERTEX_ARRAY );
 | 
			
		||||
   glVertexPointer( vcomps, GL_FLOAT, stride,
 | 
			
		||||
   gl_EnableClientState( ctx, GL_VERTEX_ARRAY );
 | 
			
		||||
   glVertexPointer(CTX_PRM vcomps, GL_FLOAT, stride,
 | 
			
		||||
                     (GLubyte *) pointer + voffset );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_mesa_DrawRangeElements(GLenum mode, GLuint start,
 | 
			
		||||
                        GLuint end, GLsizei count,
 | 
			
		||||
                        GLenum type, const GLvoid *indices)
 | 
			
		||||
void GLAPIENTRY glDrawRangeElements(CTX_ARG GLenum mode, GLuint start,
 | 
			
		||||
                                     GLuint end, GLsizei count,
 | 
			
		||||
                                     GLenum type, const GLvoid *indices )
 | 
			
		||||
{
 | 
			
		||||
   GET_CURRENT_CONTEXT(ctx);
 | 
			
		||||
   GLcontext *ctx;
 | 
			
		||||
   GET_CONTEXT;
 | 
			
		||||
   CHECK_CONTEXT;
 | 
			
		||||
   ctx = CC;
 | 
			
		||||
 | 
			
		||||
   if (end < start) {
 | 
			
		||||
      gl_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements( end < start )");
 | 
			
		||||
@@ -1106,11 +1129,11 @@ _mesa_DrawRangeElements(GLenum mode, GLuint start,
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (!ctx->Array.LockCount && 2*count > (GLint) 3*(end-start)) {
 | 
			
		||||
      glLockArraysEXT( start, end );
 | 
			
		||||
      glDrawElements( mode, count, type, indices );
 | 
			
		||||
      glUnlockArraysEXT();
 | 
			
		||||
      glLockArraysEXT(CTX_PRM start, end );
 | 
			
		||||
      glDrawElements(CTX_PRM mode, count, type, indices );
 | 
			
		||||
      glUnlockArraysEXT(CTX_VPRM );
 | 
			
		||||
   } else {
 | 
			
		||||
      glDrawElements( mode, count, type, indices );
 | 
			
		||||
      glDrawElements(CTX_PRM mode, count, type, indices );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1464,7 +1464,7 @@
 | 
			
		||||
#else
 | 
			
		||||
#define P_ARG1(a) 	a
 | 
			
		||||
#define P_ARG2(a, b) 	a, b
 | 
			
		||||
#define P_ARG3(a, b) 	a, b, c
 | 
			
		||||
#define P_ARG3(a, b, c) 	a, b, c
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* MMX */
 | 
			
		||||
@@ -1570,22 +1570,22 @@
 | 
			
		||||
	#define CMPPS(a, b, c)	cmpps P_ARG3(a, b, c)
 | 
			
		||||
	#define CMPSS(a, b, c)	cmpss P_ARG3(a, b, c)
 | 
			
		||||
*/
 | 
			
		||||
#define CMPEQPS(a, b)	cmpeqps P_ARG3(a, b)
 | 
			
		||||
#define CMPLTPS(a, b)	cmpltps P_ARG3(a, b)
 | 
			
		||||
#define CMPLEPS(a, b)	cmpleps P_ARG3(a, b)
 | 
			
		||||
#define CMPUNORDPS(a, b)	cmpunordps P_ARG3(a, b)
 | 
			
		||||
#define CMPNEQPS(a, b)	cmpneqps P_ARG3(a, b)
 | 
			
		||||
#define CMPNLTPS(a, b)	cmpnltps P_ARG3(a, b)
 | 
			
		||||
#define CMPNLEPS(a, b)	cmpnleps P_ARG3(a, b)
 | 
			
		||||
#define CMPORDPS(a, b)	cmpordps P_ARG3(a, b)
 | 
			
		||||
#define CMPEQSS(a, b)	cmpeqss P_ARG3(a, b)
 | 
			
		||||
#define CMPLTSS(a, b)	cmpltss P_ARG3(a, b)
 | 
			
		||||
#define CMPLESS(a, b)	cmpless P_ARG3(a, b)
 | 
			
		||||
#define CMPUNORDSS(a, b)	cmpunordss P_ARG3(a, b)
 | 
			
		||||
#define CMPNEQSS(a, b)	cmpneqss P_ARG3(a, b)
 | 
			
		||||
#define CMPNLTSS(a, b)	cmpnltss P_ARG3(a, b)
 | 
			
		||||
#define CMPNLESS(a, b)	cmpnless P_ARG3(a, b)
 | 
			
		||||
#define CMPORDSS(a, b)	cmpordss P_ARG3(a, b)
 | 
			
		||||
#define CMPEQPS(a, b)	cmpeqps P_ARG2(a, b)
 | 
			
		||||
#define CMPLTPS(a, b)	cmpltps P_ARG2(a, b)
 | 
			
		||||
#define CMPLEPS(a, b)	cmpleps P_ARG2(a, b)
 | 
			
		||||
#define CMPUNORDPS(a, b)	cmpunordps P_ARG2(a, b)
 | 
			
		||||
#define CMPNEQPS(a, b)	cmpneqps P_ARG2(a, b)
 | 
			
		||||
#define CMPNLTPS(a, b)	cmpnltps P_ARG2(a, b)
 | 
			
		||||
#define CMPNLEPS(a, b)	cmpnleps P_ARG2(a, b)
 | 
			
		||||
#define CMPORDPS(a, b)	cmpordps P_ARG2(a, b)
 | 
			
		||||
#define CMPEQSS(a, b)	cmpeqss P_ARG2(a, b)
 | 
			
		||||
#define CMPLTSS(a, b)	cmpltss P_ARG2(a, b)
 | 
			
		||||
#define CMPLESS(a, b)	cmpless P_ARG2(a, b)
 | 
			
		||||
#define CMPUNORDSS(a, b)	cmpunordss P_ARG2(a, b)
 | 
			
		||||
#define CMPNEQSS(a, b)	cmpneqss P_ARG2(a, b)
 | 
			
		||||
#define CMPNLTSS(a, b)	cmpnltss P_ARG2(a, b)
 | 
			
		||||
#define CMPNLESS(a, b)	cmpnless P_ARG2(a, b)
 | 
			
		||||
#define CMPORDSS(a, b)	cmpordss P_ARG2(a, b)
 | 
			
		||||
#define COMISS(a, b)	comiss P_ARG2(a, b)
 | 
			
		||||
#define CVTPI2PS(a, b)	cvtpi2ps P_ARG2(a, b)
 | 
			
		||||
#define CVTPS2PI(a, b)	cvtps2pi P_ARG2(a, b)
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,12 @@
 | 
			
		||||
 | 
			
		||||
int gl_x86_cpu_features = 0;
 | 
			
		||||
 | 
			
		||||
static void message(const char *msg)
 | 
			
		||||
{
 | 
			
		||||
   if (getenv("MESA_DEBUG"))
 | 
			
		||||
      fprintf(stderr, "%s\n", msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void gl_init_all_x86_asm (void)
 | 
			
		||||
{
 | 
			
		||||
@@ -48,7 +54,7 @@ void gl_init_all_x86_asm (void)
 | 
			
		||||
      gl_x86_cpu_features = 0;
 | 
			
		||||
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_GenuineIntel) {
 | 
			
		||||
      fprintf (stderr, "GenuineIntel cpu detected.\n");
 | 
			
		||||
      message("GenuineIntel cpu detected.");
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (gl_x86_cpu_features) {
 | 
			
		||||
@@ -59,7 +65,7 @@ void gl_init_all_x86_asm (void)
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_MMX) {
 | 
			
		||||
      char *s = getenv( "MESA_NO_MMX" );
 | 
			
		||||
      if (s == NULL) { 
 | 
			
		||||
         fprintf (stderr, "MMX cpu detected.\n");
 | 
			
		||||
         message("MMX cpu detected.");
 | 
			
		||||
      } else {
 | 
			
		||||
         gl_x86_cpu_features &= (~GL_CPU_MMX); 
 | 
			
		||||
      }
 | 
			
		||||
@@ -71,7 +77,7 @@ void gl_init_all_x86_asm (void)
 | 
			
		||||
   if (gl_x86_cpu_features & GL_CPU_3Dnow) {
 | 
			
		||||
      char *s = getenv( "MESA_NO_3DNOW" );
 | 
			
		||||
      if (s == NULL) {
 | 
			
		||||
         fprintf (stderr, "3Dnow cpu detected.\n");
 | 
			
		||||
         message("3Dnow cpu detected.");
 | 
			
		||||
         gl_init_3dnow_asm_transforms ();
 | 
			
		||||
      } else {
 | 
			
		||||
         gl_x86_cpu_features &= (~GL_CPU_3Dnow); 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user