Compare commits
	
		
			120 Commits
		
	
	
		
			mesa-23.1.
			...
			mesa_5_0_1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6faeeb59ba | ||
| 
						 | 
					0670bb52e2 | ||
| 
						 | 
					42ed7b78c3 | ||
| 
						 | 
					c44e5d39a5 | ||
| 
						 | 
					af709ec217 | ||
| 
						 | 
					c6c35a0d7e | ||
| 
						 | 
					4ccebff103 | ||
| 
						 | 
					0a89996605 | ||
| 
						 | 
					3bff7aed0e | ||
| 
						 | 
					605b7859c2 | ||
| 
						 | 
					bc0359a076 | ||
| 
						 | 
					6677a919f1 | ||
| 
						 | 
					b099d2137e | ||
| 
						 | 
					b58c0dec59 | ||
| 
						 | 
					9935d3434d | ||
| 
						 | 
					b28cbbf5a4 | ||
| 
						 | 
					a5213e2cac | ||
| 
						 | 
					e62a6bdb3a | ||
| 
						 | 
					7709bd06f2 | ||
| 
						 | 
					4b3f54ecb1 | ||
| 
						 | 
					3a55d83d21 | ||
| 
						 | 
					6899598be8 | ||
| 
						 | 
					88db8b061b | ||
| 
						 | 
					8b0f7c5ab7 | ||
| 
						 | 
					683dba1164 | ||
| 
						 | 
					4965446dbd | ||
| 
						 | 
					9c3b611b85 | ||
| 
						 | 
					48f8949cd2 | ||
| 
						 | 
					cd4fc963a4 | ||
| 
						 | 
					c24d9b330e | ||
| 
						 | 
					62968d677c | ||
| 
						 | 
					5e4a96980e | ||
| 
						 | 
					6397f53174 | ||
| 
						 | 
					3de75f6f68 | ||
| 
						 | 
					d1f324a779 | ||
| 
						 | 
					3442cd9a9f | ||
| 
						 | 
					324616ed83 | ||
| 
						 | 
					6c59c0b9ec | ||
| 
						 | 
					2ccb06cb4e | ||
| 
						 | 
					7b1b099af3 | ||
| 
						 | 
					6accaacbed | ||
| 
						 | 
					30beb26dbb | ||
| 
						 | 
					735a8aee5a | ||
| 
						 | 
					764b1d5455 | ||
| 
						 | 
					b87a9089da | ||
| 
						 | 
					69a4ff186a | ||
| 
						 | 
					d16d5fb06a | ||
| 
						 | 
					8fee42cd6f | ||
| 
						 | 
					34af895a99 | ||
| 
						 | 
					4c5745b081 | ||
| 
						 | 
					dd2f83fb0e | ||
| 
						 | 
					379c151989 | ||
| 
						 | 
					379412994f | ||
| 
						 | 
					c5e6bd00be | ||
| 
						 | 
					bf490e3ae5 | ||
| 
						 | 
					984f7e5324 | ||
| 
						 | 
					7a23c68f35 | ||
| 
						 | 
					cb2eaf84a3 | ||
| 
						 | 
					8829f949f8 | ||
| 
						 | 
					015c4787d7 | ||
| 
						 | 
					19c628d279 | ||
| 
						 | 
					50bfa18670 | ||
| 
						 | 
					57f9dc808a | ||
| 
						 | 
					ef2d42b144 | ||
| 
						 | 
					e3aa4c1d98 | ||
| 
						 | 
					d7facf95f8 | ||
| 
						 | 
					3543b12519 | ||
| 
						 | 
					cfdb6711f8 | ||
| 
						 | 
					283eab087b | ||
| 
						 | 
					9c04e1c1d9 | ||
| 
						 | 
					16a832fa89 | ||
| 
						 | 
					5b8c98abee | ||
| 
						 | 
					8126d169ec | ||
| 
						 | 
					27a2f9fdfd | ||
| 
						 | 
					ad6514aac0 | ||
| 
						 | 
					de0c25a481 | ||
| 
						 | 
					a77151fb44 | ||
| 
						 | 
					df27002ac9 | ||
| 
						 | 
					7e07dfb604 | ||
| 
						 | 
					76cb735d0c | ||
| 
						 | 
					530ce7f0ed | ||
| 
						 | 
					d856a056d3 | ||
| 
						 | 
					7e7415fbab | ||
| 
						 | 
					789d79e882 | ||
| 
						 | 
					0e4e3606a3 | ||
| 
						 | 
					b53092916f | ||
| 
						 | 
					92b132b966 | ||
| 
						 | 
					a5eb3c6a37 | ||
| 
						 | 
					050268971b | ||
| 
						 | 
					dbdc9e92b5 | ||
| 
						 | 
					ca3d8e4605 | ||
| 
						 | 
					fc16876967 | ||
| 
						 | 
					83666eb33f | ||
| 
						 | 
					adbf94ca38 | ||
| 
						 | 
					7b3a50acf1 | ||
| 
						 | 
					4396dd1a3b | ||
| 
						 | 
					8f5f0fd6f8 | ||
| 
						 | 
					ce733f495e | ||
| 
						 | 
					b0e246bf9a | ||
| 
						 | 
					7ffbdc48b6 | ||
| 
						 | 
					bd77908248 | ||
| 
						 | 
					b319c105ea | ||
| 
						 | 
					a987857ca5 | ||
| 
						 | 
					b6af31d4c6 | ||
| 
						 | 
					3cfadcf097 | ||
| 
						 | 
					10174c5efd | ||
| 
						 | 
					f24e9c8ad7 | ||
| 
						 | 
					8f47c7f0df | ||
| 
						 | 
					dce96e2450 | ||
| 
						 | 
					c264409c46 | ||
| 
						 | 
					83df49f95d | ||
| 
						 | 
					ffb4ef6929 | ||
| 
						 | 
					1f7aeedf55 | ||
| 
						 | 
					2e5a88ab6a | ||
| 
						 | 
					d520ff08d0 | ||
| 
						 | 
					ef0e1dcc2e | ||
| 
						 | 
					6412641b19 | ||
| 
						 | 
					3ee066b48f | ||
| 
						 | 
					33c0b3e233 | ||
| 
						 | 
					658145bd82 | 
@@ -1,13 +1,13 @@
 | 
			
		||||
# $Id: Make-config,v 1.67 2002/11/12 02:49:14 brianp Exp $
 | 
			
		||||
# $Id: Make-config,v 1.67.2.1 2003/03/27 18:35:55 brianp Exp $
 | 
			
		||||
 | 
			
		||||
MESA_MAJOR=5
 | 
			
		||||
MESA_MINOR=0
 | 
			
		||||
MESA_TINY=0
 | 
			
		||||
MESA_TINY=1
 | 
			
		||||
VERSION=$(MESA_MAJOR).$(MESA_MINOR)
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# 
 | 
			
		||||
# Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 | 
			
		||||
# Copyright (C) 1999-2003  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"),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										76
									
								
								Makefile.X11
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								Makefile.X11
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
# $Id: Makefile.X11,v 1.69 2002/11/13 15:33:51 brianp Exp $
 | 
			
		||||
# $Id: Makefile.X11,v 1.69.2.4 2003/03/11 15:34:29 brianp Exp $
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  5.0
 | 
			
		||||
# Version:  5.0.1
 | 
			
		||||
# 
 | 
			
		||||
# Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 | 
			
		||||
# Copyright (C) 1999-2003  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"),
 | 
			
		||||
@@ -330,10 +330,10 @@ realclean: clean
 | 
			
		||||
	cd samples     && $(MAKE) -f Makefile.X11 realclean || true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DIRECTORY = Mesa-5.0
 | 
			
		||||
LIB_NAME = MesaLib-5.0
 | 
			
		||||
DEMO_NAME = MesaDemos-5.0
 | 
			
		||||
GLU_NAME = MesaGLU-5.0
 | 
			
		||||
DIRECTORY = Mesa-5.0.1
 | 
			
		||||
LIB_NAME = MesaLib-5.0.1
 | 
			
		||||
DEMO_NAME = MesaDemos-5.0.1
 | 
			
		||||
GLU_NAME = MesaGLU-5.0.1
 | 
			
		||||
GLUT_NAME = GLUT-3.7
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -429,7 +429,7 @@ LIB_FILES =	\
 | 
			
		||||
	$(DIRECTORY)/src/windml/man3/*.3				\
 | 
			
		||||
	$(DIRECTORY)/src/windml/man3/*.html				\
 | 
			
		||||
	$(DIRECTORY)/src/DOS/*.[chS]					\
 | 
			
		||||
	$(DIRECTORY)/src/DOS/vesa/*.[ch]				\
 | 
			
		||||
	$(DIRECTORY)/src/DOS/mga/*.[ch]					\
 | 
			
		||||
	$(DIRECTORY)/src/BeOS/*.cpp					\
 | 
			
		||||
	$(DIRECTORY)/src/FX/Makefile.am					\
 | 
			
		||||
	$(DIRECTORY)/src/FX/Makefile.in					\
 | 
			
		||||
@@ -486,6 +486,7 @@ LIB_FILES =	\
 | 
			
		||||
	$(DIRECTORY)/si-glu/Makefile.in					\
 | 
			
		||||
	$(DIRECTORY)/si-glu/Makefile.X11				\
 | 
			
		||||
	$(DIRECTORY)/si-glu/Makefile.win				\
 | 
			
		||||
	$(DIRECTORY)/si-glu/Makefile.DJ					\
 | 
			
		||||
	$(DIRECTORY)/si-glu/glu.def					\
 | 
			
		||||
	$(DIRECTORY)/si-glu/dummy.cc					\
 | 
			
		||||
	$(DIRECTORY)/si-glu/descrip.mms					\
 | 
			
		||||
@@ -705,33 +706,31 @@ OBSOLETE_GLUT_FILES = \
 | 
			
		||||
	$(DIRECTORY)/src-glut.beos/*.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
lib_tar:
 | 
			
		||||
lib_gz:
 | 
			
		||||
	cp Makefile.X11 Makefile ; \
 | 
			
		||||
	cd .. ; \
 | 
			
		||||
	tar -cvf $(LIB_NAME).tar $(LIB_FILES) ; \
 | 
			
		||||
	gzip $(LIB_NAME).tar ; \
 | 
			
		||||
	mv $(LIB_NAME).tar.gz $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
demo_tar:
 | 
			
		||||
demo_gz:
 | 
			
		||||
	cd .. ; \
 | 
			
		||||
	tar -cvf $(DEMO_NAME).tar $(DEMO_FILES) ; \
 | 
			
		||||
	gzip $(DEMO_NAME).tar ; \
 | 
			
		||||
	mv $(DEMO_NAME).tar.gz $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
glu_tar:
 | 
			
		||||
lib_bz2:
 | 
			
		||||
	cp Makefile.X11 Makefile ; \
 | 
			
		||||
	cd .. ; \
 | 
			
		||||
	tar -cvf $(GLU_NAME).tar $(GLU_FILES) ; \
 | 
			
		||||
	gzip $(GLU_NAME).tar ; \
 | 
			
		||||
	mv $(GLU_NAME).tar.gz $(DIRECTORY)
 | 
			
		||||
	tar -cvf $(LIB_NAME).tar $(LIB_FILES) ; \
 | 
			
		||||
	bzip2 $(LIB_NAME).tar ; \
 | 
			
		||||
	mv $(LIB_NAME).tar.bz2 $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
glut_tar:
 | 
			
		||||
	cp Makefile.X11 Makefile ; \
 | 
			
		||||
demo_bz2:
 | 
			
		||||
	cd .. ; \
 | 
			
		||||
	tar -cvf $(GLUT_NAME).tar $(GLUT_FILES) ; \
 | 
			
		||||
	gzip $(GLUT_NAME).tar ; \
 | 
			
		||||
	mv $(GLUT_NAME).tar.gz $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
	tar -cvf $(DEMO_NAME).tar $(DEMO_FILES) ; \
 | 
			
		||||
	bzip2 $(DEMO_NAME).tar ; \
 | 
			
		||||
	mv $(DEMO_NAME).tar.bz2 $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
lib_zip:
 | 
			
		||||
	-rm $(LIB_NAME).zip ; \
 | 
			
		||||
@@ -746,20 +745,29 @@ demo_zip:
 | 
			
		||||
	zip -r $(DEMO_NAME).zip $(DEMO_FILES) ; \
 | 
			
		||||
	mv $(DEMO_NAME).zip $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
md5:
 | 
			
		||||
	@-md5sum $(LIB_NAME).tar.gz
 | 
			
		||||
	@-md5sum $(LIB_NAME).tar.bz2
 | 
			
		||||
	@-md5sum $(LIB_NAME).zip
 | 
			
		||||
	@-md5sum $(DEMO_NAME).tar.gz
 | 
			
		||||
	@-md5sum $(DEMO_NAME).tar.bz2
 | 
			
		||||
	@-md5sum $(DEMO_NAME).zip
 | 
			
		||||
 | 
			
		||||
# Everything for new Mesa release:
 | 
			
		||||
tarballs: lib_gz demo_gz lib_bz2 demo_bz2 lib_zip demo_zip md5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SRC_FILES =	\
 | 
			
		||||
	RELNOTES		\
 | 
			
		||||
	src/Makefile*		\
 | 
			
		||||
	src/depend		\
 | 
			
		||||
	src/*.[chS]		\
 | 
			
		||||
	src/*/*.[ch]		\
 | 
			
		||||
	include/GL/*.h
 | 
			
		||||
# not used
 | 
			
		||||
glu_gz:
 | 
			
		||||
	cp Makefile.X11 Makefile ; \
 | 
			
		||||
	cd .. ; \
 | 
			
		||||
	tar -cvf $(GLU_NAME).tar $(GLU_FILES) ; \
 | 
			
		||||
	gzip $(GLU_NAME).tar ; \
 | 
			
		||||
	mv $(GLU_NAME).tar.gz $(DIRECTORY)
 | 
			
		||||
 | 
			
		||||
srctar:
 | 
			
		||||
	tar -cvf src.tar $(SRC_FILES) ; \
 | 
			
		||||
	gzip src.tar
 | 
			
		||||
 | 
			
		||||
srctar.zip:
 | 
			
		||||
	-rm src.zip
 | 
			
		||||
	zip -r src.zip $(SRC_FILES) ; \
 | 
			
		||||
glut_gz:
 | 
			
		||||
	cp Makefile.X11 Makefile ; \
 | 
			
		||||
	cd .. ; \
 | 
			
		||||
	tar -cvf $(GLUT_NAME).tar $(GLUT_FILES) ; \
 | 
			
		||||
	gzip $(GLUT_NAME).tar ; \
 | 
			
		||||
	mv $(GLUT_NAME).tar.gz $(DIRECTORY)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										210
									
								
								docs/README.DJ
									
									
									
									
									
								
							
							
						
						
									
										210
									
								
								docs/README.DJ
									
									
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
			
		||||
			Mesa 4.1 DOS/DJGPP Port v1.2
 | 
			
		||||
			~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
			Mesa 5.0.1 DOS/DJGPP Port v1.3
 | 
			
		||||
			~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Description:
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Well, guess what... this is the DOS port of Mesa 4.1, for DJGPP fans... Whoa!
 | 
			
		||||
Well, guess what... this is the DOS port of Mesa 5.0.1, for DJGPP fans... Whoa!
 | 
			
		||||
The driver has its origins in ddsample.c, written by Brian Paul and found by me
 | 
			
		||||
in Mesa 3.4.2.
 | 
			
		||||
 | 
			
		||||
@@ -32,20 +32,24 @@ Available options:
 | 
			
		||||
     Environment variables:
 | 
			
		||||
	CPU		optimize for the given processor.
 | 
			
		||||
			default = k6
 | 
			
		||||
	BIG_OPT=1	crazy optimizations; not very useful, though...
 | 
			
		||||
			default = no
 | 
			
		||||
	GLIDE		absolute path to Glide library; used with FX.
 | 
			
		||||
	GLU=[src|si]	specify GLU directory; can be `src' (src-glu = Mesa)
 | 
			
		||||
			or `si' (si-glu = SGI's GLU -- requires GNU/C++).
 | 
			
		||||
			default = src
 | 
			
		||||
	GLIDE		path to Glide3 SDK include files; used with FX.
 | 
			
		||||
			default = $(TOP)/include/glide3
 | 
			
		||||
	FX=1		build for 3dfx Glide3; use it if you have the Glide
 | 
			
		||||
			SDK (designed for your platform), and, of course, a
 | 
			
		||||
			3dfx card... Note that this disables compilation of
 | 
			
		||||
			actual DMesa code, as Glide does all the stuff!
 | 
			
		||||
	FX=1		build for 3dfx Glide3. Note that this disables
 | 
			
		||||
			compilation of most DMesa code and requires fxMesa.
 | 
			
		||||
			As a consequence, you'll need the DJGPP Glide3
 | 
			
		||||
			library to build any application.
 | 
			
		||||
			default = no
 | 
			
		||||
	MATROX=1	build for Matrox Millennium I (MGA2064W) cards.
 | 
			
		||||
			This is experimental and not intensively tested.
 | 
			
		||||
			default = no
 | 
			
		||||
	HAVE_X86=1	optimize for i386.
 | 
			
		||||
			default = no
 | 
			
		||||
	HAVE_MMX=1	MMX instructions; use only if you assembler/compiler
 | 
			
		||||
			supports MMX instruction set; backwards compatibility
 | 
			
		||||
			with older processors is still preserved.
 | 
			
		||||
	HAVE_MMX=1	allow MMX specializations, provided your assembler
 | 
			
		||||
			supports MMX instruction set. However, the true CPU
 | 
			
		||||
			capabilities are checked at run-time to avoid crashes.
 | 
			
		||||
			default = no
 | 
			
		||||
	HAVE_SSE=1	(see HAVE_MMX)
 | 
			
		||||
			default = no
 | 
			
		||||
@@ -65,8 +69,9 @@ Available options:
 | 
			
		||||
Tested on:
 | 
			
		||||
	CPU:		K6-2 (CXT) @500(412.5) MHz
 | 
			
		||||
	Mainboard:	ViA Apollo VP2/97 w/ 128 MB SDRAM
 | 
			
		||||
	Video card:	PowerColor Evil King3 (Voodoo3 3000) w/ 16384 kB SDRAM
 | 
			
		||||
	DJGPP:		djdev 2.04 + gcc v3.2 + make v3.79.1
 | 
			
		||||
	Video card:	PowerColor EvilKing3 (Voodoo3 3000 PCI) w/ 16 MB SDRAM
 | 
			
		||||
	DJGPP:		djdev 2.04 + gcc v3.2.2 + make v3.79.1
 | 
			
		||||
	OS:		DOS and Win9x
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -80,124 +85,135 @@ FAQ:
 | 
			
		||||
   A) You need LFN support.
 | 
			
		||||
   A) When compiling for Glide (FX=1), pay attention to Glide path.
 | 
			
		||||
 | 
			
		||||
2. Dynamic modules
 | 
			
		||||
   Q) Libraries built OK, but linker complains about `vsnprintf' every time I
 | 
			
		||||
      compile some demo.
 | 
			
		||||
   A) Upgrade to DJGPP 2.04.
 | 
			
		||||
   A) Add `vsnprintf.c' to the CORE_SOURCES in `src/Makefile.DJ' (untested!).
 | 
			
		||||
   A) The following hack should be safe in 90% of the cases, but if anything
 | 
			
		||||
      goes wrong, don't come back to me crying. Anyway, patch `src/imports.c'
 | 
			
		||||
      with the following line:
 | 
			
		||||
	#define vsnprintf(buf, max, fmt, arg) vsprintf(buf, fmt, arg)
 | 
			
		||||
 | 
			
		||||
   Q) What are you mumbling about dynamic modules?
 | 
			
		||||
   A) You must have the DXE2 package (available on SimTel.Net, courtesy of
 | 
			
		||||
      Andrew Zabolotny) installed in order to build the dynamic modules.
 | 
			
		||||
   Q) `make' complains about DXE3 or something, yet it builds the libraries.
 | 
			
		||||
   A) DXE3 refers to the DJGPP dynamic modules. You'll need either the latest
 | 
			
		||||
      DJGPP distro, or download the separate package from my web page. Read the
 | 
			
		||||
      DXE3 documentation on how to use them. Hint: build your export object
 | 
			
		||||
      file; then link it with your application. For example:
 | 
			
		||||
	dxe3res -o dxe3tbl.c gl.dxe glu.dxe glut.dxe
 | 
			
		||||
	gcc -o dxe3tbl.o -c dxe3tbl.c
 | 
			
		||||
	gcc -o OUT.exe dxe3tbl.o IN.c -liglut -liglu -ligl -ldl
 | 
			
		||||
 | 
			
		||||
   Q) I have DXE2, but I couldn't build the `dxe2gen.exe'.
 | 
			
		||||
   Q) I built `dxe2gen.exe', but it doesn't do the job right.
 | 
			
		||||
   A) There is a patched version on my web page.
 | 
			
		||||
2. Using Mesa for DJGPP
 | 
			
		||||
 | 
			
		||||
   Q) DXE2 modules give me headaches...
 | 
			
		||||
   A) The DXE2 modules are not compulsory. The static libraries are still built
 | 
			
		||||
      and you can use them in the old-fashioned, classic way... and learn to
 | 
			
		||||
      live with your ~2MB executable size. For example:
 | 
			
		||||
	gcc -o OUT.exe IN.c -lglut -lglu -lgl
 | 
			
		||||
   Q) DMesa is so SLOOOW! The Win32 OpenGL performs so much better...
 | 
			
		||||
   A) Is that a question? If you have a Voodoo3/Banshee card, you're lucky (the
 | 
			
		||||
      Glide port is on my web page). If you have a Matrox Millennium I card,
 | 
			
		||||
      you just MIGHT be lucky... If you haven't, sorry; everything is done in
 | 
			
		||||
      software. Suggestions?
 | 
			
		||||
 | 
			
		||||
   Q) Okay, DXE2 modules are built. How can I use them?
 | 
			
		||||
   A) Build your export object file; then link it with your application.
 | 
			
		||||
      For example:
 | 
			
		||||
	dxe2res -o dmesadxe.c gl.dxe glu.dxe glut.dxe
 | 
			
		||||
	gcc -o dmesadxe.o dmesadxe.c
 | 
			
		||||
	gcc -o OUT.exe dmesadxe.o IN.c -liglut -liglu -ligl -ldl
 | 
			
		||||
 | 
			
		||||
   Q) What is that `dxe2res.exe' thing?
 | 
			
		||||
   A) That is an utility that generates the export file for a given set of
 | 
			
		||||
      modules. If you can't find it in the DXE2 package, you must be looking at
 | 
			
		||||
      the wrong archive :)
 | 
			
		||||
 | 
			
		||||
3. Using Mesa for DJGPP
 | 
			
		||||
 | 
			
		||||
   Q) Does this build work in Win9x?
 | 
			
		||||
   A) Yes.
 | 
			
		||||
 | 
			
		||||
   Q) Does it work under NT (W2k, XP) core?
 | 
			
		||||
   A) Uh... probably not!
 | 
			
		||||
   Q) I tried to set refresh rate w/ DMesa, but without success.
 | 
			
		||||
   A) Refresh rate control works only for VESA 3.0. If you were compiling for
 | 
			
		||||
      Glide, see Glide info. If not, sorry!
 | 
			
		||||
 | 
			
		||||
   Q) I made a simple application and it does nothing. It exits right away. Not
 | 
			
		||||
      even a blank screen.
 | 
			
		||||
   A) The current version supports only RGB[A] modes, for it made no sense to
 | 
			
		||||
      me to endorse color-index (aka palette) modes.
 | 
			
		||||
   A) Single-buffered is not allowed at all. Until I can find a way to use
 | 
			
		||||
      *REAL* hardware acceleration, it won't get implemented.
 | 
			
		||||
   A) Another weird "feature" is that buffer width must be multiple of 4 (I'm a
 | 
			
		||||
   A) The pure software drivers (VESA/VGA) support only double-buffered modes.
 | 
			
		||||
   A) Another weird "feature" is that buffer width must be multiple of 8 (I'm a
 | 
			
		||||
      lazy programmer and I found that the easiest way to keep buffer handling
 | 
			
		||||
      at peak performance ;-).
 | 
			
		||||
 | 
			
		||||
   Q) My demo doesn't display text. I know I used the glut font routines!
 | 
			
		||||
   Q) My demo doesn't display text. I know I used the GLUT font routines!
 | 
			
		||||
   A) Then you probably use GLUT as a DXE. Well, there is no direct access to
 | 
			
		||||
      variables due to the way DXE works. Read the documentation. The author of
 | 
			
		||||
      GLUT took this into account for _WIN32 DLL's only; I don't want to modify
 | 
			
		||||
      his headers. The only workaround is to link GLUT the old way :-(
 | 
			
		||||
 | 
			
		||||
   Q) DMesa is so SLOOOW! The Win32 OpenGL performs so much
 | 
			
		||||
      better...
 | 
			
		||||
   A) Is that a question? If you have a Voodoo3/Banshee card, you're lucky. The
 | 
			
		||||
      Glide port is on my web page. If you haven't, sorry; everything is done
 | 
			
		||||
      in software. Suggestions?
 | 
			
		||||
 | 
			
		||||
   Q) I have a super/mega/ultra monitor and all you can do is 60Hz? My eyes are
 | 
			
		||||
      leaking from the orbits...
 | 
			
		||||
   A) If you were compiling for Glide, see Glide info. If not, be aware that
 | 
			
		||||
      refresh rate control works only for VESA 3.0. The environment variable
 | 
			
		||||
      DMESA_REFRESH sets the default screen refresh. For example:
 | 
			
		||||
	set DMESA_REFRESH=75
 | 
			
		||||
   Q) The GLUT is incomplete.
 | 
			
		||||
   A) See below.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
libGLUT (the toolkit):
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Well, this "skeletal" GLUT implementation is not mine. Thanks should go to
 | 
			
		||||
Bernhard Tschirren, Mark Kilgard, Brian Paul and probably others (or probably
 | 
			
		||||
not ;-). I only changed it to be self-standing (Allegro-free). The keyboard,
 | 
			
		||||
mouse and timer drivers were inspired from an old project of mine (D3Xl) and
 | 
			
		||||
fixed with many Allegro "infusions"; I deeply thank to Shawn Hargreaves et co.
 | 
			
		||||
Well, this "skeletal" GLUT implementation was taken from AllegGL project and
 | 
			
		||||
heavily changed. Thanks should go to Bernhard Tschirren, Mark Kilgard, Brian
 | 
			
		||||
Paul and probably others (or probably not ;-). GLUT functionality will be
 | 
			
		||||
extended only on an "as needed" basis.
 | 
			
		||||
 | 
			
		||||
My keyboard driver used only scancodes, but since GLUT requires ASCII values
 | 
			
		||||
for keys, I borrowed the translation tables (and maybe more) from Allegro.
 | 
			
		||||
Ctrl-Alt-Del (plus Ctrl-Alt-End, for Windows users) will shut down the GLUT
 | 
			
		||||
engine unconditionally: it will raise SIGINT, which in turn will call the
 | 
			
		||||
destructors (let's hope), thus cleaning up your/my mess ;-) NB: since the
 | 
			
		||||
DJGPP guys ensured signal handlers won't go beyond program's space (and since
 | 
			
		||||
dynamic modules shall) the SIGINT can't be hooked (well, it can, but it is
 | 
			
		||||
useless), therefore you must live with the 'Exiting due to signal SIGINT'
 | 
			
		||||
message...
 | 
			
		||||
GLUT talks to hardware via PC_HW package which was put together from various
 | 
			
		||||
pieces I wrote long time ago. It consists from the keyboard, mouse and timer
 | 
			
		||||
drivers.
 | 
			
		||||
 | 
			
		||||
The mouse driver is far from complete (lack of positioning, drawing, etc),
 | 
			
		||||
but is enough to make almost all the demos work.
 | 
			
		||||
My keyboard driver used only scancodes; as GLUT requires ASCII values for keys,
 | 
			
		||||
I borrowed the translation tables (and maybe more) from Allegro -- many thanks
 | 
			
		||||
to Shawn Hargreaves et co. Ctrl-Alt-Del (plus Ctrl-Alt-End, for Windows users)
 | 
			
		||||
will shut down the GLUT engine unconditionally: it will raise SIGINT, which in
 | 
			
		||||
turn will (hopefully) call the destructors, thus cleaning up your/my mess ;-)
 | 
			
		||||
NB: since the DJGPP guys ensured signal handlers won't go beyond program's
 | 
			
		||||
space (and since dynamic modules shall) the SIGINT can't be hooked (well, it
 | 
			
		||||
can, but it is useless), therefore you must live with the 'Exiting due to
 | 
			
		||||
signal SIGINT' message...
 | 
			
		||||
 | 
			
		||||
The mouse driver is far from complete (lack of drawing, etc), but is enough to
 | 
			
		||||
make almost all the demos work. Supports the CuteMouse WheelAPI.
 | 
			
		||||
 | 
			
		||||
The timer is pretty versatile for it supports multiple timers with different
 | 
			
		||||
frequencies. It may not be the most accurate timer in the known universe, but
 | 
			
		||||
I think it's OK. Take this example: you have timer A with a very high rate,
 | 
			
		||||
and then you have timer B with very low rate compared to A; now, A ticks OK,
 | 
			
		||||
but timer B will probably loose precision!
 | 
			
		||||
frequencies. While not being the most accurate timer in the known universe, I
 | 
			
		||||
think it's OK. Take this example: you have timer A with a very high rate, and
 | 
			
		||||
then you have timer B with very low rate compared to A; now, A ticks OK, but
 | 
			
		||||
timer B will probably loose precision!
 | 
			
		||||
 | 
			
		||||
As an addition, stdout and stderr are redirected and dumped upon exit. This
 | 
			
		||||
means that printf can be safely called during graphics, but all messages come
 | 
			
		||||
in bulk! A bit of a hack, I know, but I think it's better than to miss them
 | 
			
		||||
at all. "Borrowed" from RHIDE (Robert Hoehne) or SETEDIT (Salvador Eduardo
 | 
			
		||||
Tropea)... I'm not sure.
 | 
			
		||||
means that `printf' can be safely called during graphics. A bit of a hack, I
 | 
			
		||||
know, because all messages come in bulk, but I think it's better than nothing.
 | 
			
		||||
"Borrowed" from LIBRHUTI (Robert Hoehne).
 | 
			
		||||
 | 
			
		||||
Window creating defaults: 640x480x16 at (0,0), 8-bit stencil, 16-bit accum.
 | 
			
		||||
However, the video mode is chosen in such a way that first window will fit.
 | 
			
		||||
Window creating defaults: 300x300x16 at (0,0), 16-bit depth, 16-bit accum,
 | 
			
		||||
8-bit stencil. However, the video mode is chosen in such a way that first
 | 
			
		||||
window will fit. If you need high resolution with small windows, set initial
 | 
			
		||||
position far to the right (or way down); then you can move them back to any
 | 
			
		||||
position right before the main loop.
 | 
			
		||||
 | 
			
		||||
The following environment variables can customize GLUT behaviour:
 | 
			
		||||
	DMESA_GLUT_REFRESH	- set vertical screen refresh rate (VESA3)
 | 
			
		||||
	DMESA_GLUT_BPP		- set default bits per pixel (VGA needs 8)
 | 
			
		||||
	GLUT_FPS		- print frames/second statistics to stderr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
History:
 | 
			
		||||
~~~~~~~~
 | 
			
		||||
 | 
			
		||||
v1.0	mar-2002	initial release
 | 
			
		||||
v1.0 (mar-2002)
 | 
			
		||||
	initial release
 | 
			
		||||
 | 
			
		||||
v1.1	sep-2002	+ added 3dfx Glide3 support
 | 
			
		||||
			+ added refresh rate control
 | 
			
		||||
			+ added fonts in glut
 | 
			
		||||
			* lots of minor changes
 | 
			
		||||
v1.1 (sep-2002)
 | 
			
		||||
	+ added 3dfx Glide3 support
 | 
			
		||||
	+ added refresh rate control
 | 
			
		||||
	+ added fonts in GLUT
 | 
			
		||||
	* lots of minor changes
 | 
			
		||||
 | 
			
		||||
v1.2	nov-2002	* synced w/ Mesa-4.1
 | 
			
		||||
			- removed dmesadxe.h
 | 
			
		||||
v1.2 (nov-2002)
 | 
			
		||||
	* synced w/ Mesa-4.1
 | 
			
		||||
	- removed dmesadxe.h
 | 
			
		||||
 | 
			
		||||
v1.3 (mar-2003)
 | 
			
		||||
	+ enabled OpenGL 1.4 support
 | 
			
		||||
	+ added MMX clear/blit routines
 | 
			
		||||
	+ enabled SGI's GLU compilation
 | 
			
		||||
	+ added samples makefile
 | 
			
		||||
	+ added new GLUT functions
 | 
			
		||||
	+ added color-index modes
 | 
			
		||||
	+ added Matrox Millennium MGA2064W driver
 | 
			
		||||
	+ added 8bit FakeColor (thanks to Neil Funk)
 | 
			
		||||
	+ added VGA support (to keep Ben Decker happy)
 | 
			
		||||
	! fixed some compilation errors (reported by Chan Kar Heng)
 | 
			
		||||
	* optimized driver for faster callback access... yeah, right :)
 | 
			
		||||
	* overhauled virtual buffer and internal video drivers
 | 
			
		||||
	* better fxMesa integration
 | 
			
		||||
	* revamped GLUT
 | 
			
		||||
	* switched to DXE3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								docs/RELNOTES-5.0.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								docs/RELNOTES-5.0.1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
 | 
			
		||||
                           Mesa 5.0.1 release notes
 | 
			
		||||
 | 
			
		||||
                               March 30, 2003
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Introduction
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Mesa uses an even/odd version number scheme like the Linux kernel.
 | 
			
		||||
Even-numbered versions (such as 5.0.x) designate stable releases.
 | 
			
		||||
Odd-numbered versions (such as 4.1.x) designate new developmental releases.
 | 
			
		||||
 | 
			
		||||
Mesa 5.0.1 just fixes bugs found since the 5.0 release.  See the VERSIONS
 | 
			
		||||
file for details.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Device Driver Status
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
A number of Mesa's software drivers haven't been actively maintained for
 | 
			
		||||
some time.  We rely on volunteers to maintain many of these drivers.
 | 
			
		||||
Here's the current status of all included drivers:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Driver			Status
 | 
			
		||||
----------------------	---------------------
 | 
			
		||||
XMesa (Xlib)		implements OpenGL 1.4
 | 
			
		||||
OSMesa (off-screen)	implements OpenGL 1.4
 | 
			
		||||
FX (3dfx Voodoo1/2)	implements OpenGL 1.3
 | 
			
		||||
SVGA			implements OpenGL 1.3
 | 
			
		||||
Wind River UGL		implements OpenGL 1.3
 | 
			
		||||
Windows/Win32		implements OpenGL 1.4
 | 
			
		||||
DJGPP			implements OpenGL 1.4
 | 
			
		||||
GGI			implements OpenGL 1.3
 | 
			
		||||
BeOS			implements OpenGL 1.4
 | 
			
		||||
Allegro			needs updating
 | 
			
		||||
D3D			needs updating
 | 
			
		||||
 | 
			
		||||
Note: supporting OpenGL 1.4 (vs. 1.3 or 1.2) usually only requires that the
 | 
			
		||||
driver call the _mesa_enable_1_4_extensions() function.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------
 | 
			
		||||
$Id: RELNOTES-5.0.1,v 1.1.2.4 2003/03/30 16:07:16 brianp Exp $
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
$Id: VERSIONS,v 1.118 2002/11/13 15:33:50 brianp Exp $
 | 
			
		||||
$Id: VERSIONS,v 1.118.2.25 2003/03/29 16:11:22 brianp Exp $
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Mesa Version History
 | 
			
		||||
@@ -1080,3 +1080,41 @@ Mesa Version History
 | 
			
		||||
	- fixed one-bit error in point/line fragment Z calculation
 | 
			
		||||
	- fixed potential segfault in fakeglx code
 | 
			
		||||
	- fixed color overflow problem in DOT3 texture env mode
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
5.0.1  March 30, 2003
 | 
			
		||||
    New:
 | 
			
		||||
	- DOS driver updates from Daniel Borca
 | 
			
		||||
	- updated GL/gl_mangle.h file (Bill Hoffman)
 | 
			
		||||
    Bug fixes:
 | 
			
		||||
	- auto mipmap generation for cube maps was broken (bug 641363)
 | 
			
		||||
	- writing/clearing software alpha channels was unreliable
 | 
			
		||||
	- minor compilation fixes for OS/2 (Evgeny Kotsuba)
 | 
			
		||||
	- fixed some bad assertions found with shadowtex demo
 | 
			
		||||
	- fixed error checking bug in glCopyTexSubImage2D (bug 659020)
 | 
			
		||||
	- glRotate(angle, -x, 0, 0) was incorrect (bug 659677)
 | 
			
		||||
	- fixed potential segfault in texture object validation (bug 659012)
 | 
			
		||||
	- fixed some bogus code in _mesa_test_os_sse_exception_support (Linus)
 | 
			
		||||
	- fix fog stride bug in tnl code for h/w drivers (Michel Danzer)
 | 
			
		||||
	- fixed glActiveTexture / glMatrixMode(GL_TEXTURE) bug (#669080)
 | 
			
		||||
	- glGet(GL_CURRENT_SECONDARY_COLOR) should return 4 values, not 3
 | 
			
		||||
	- fixed compilation problem on Solaris7/x86 (bug 536406)
 | 
			
		||||
	- fixed prefetch bug in 3DNow! code (Felix Kuhling)
 | 
			
		||||
	- fixed NeXT build problem (FABSF macro)
 | 
			
		||||
	- glDrawPixels Z values when glPixelZoom!=1 were invalid (bug 687811)
 | 
			
		||||
	- zoomed glDraw/CopyPixels with clipping sometimes failed (bug 689964)
 | 
			
		||||
	- AA line and triangle Z values are now rounded, not truncated
 | 
			
		||||
	- fixed color interpolation bug when GLchan==GLfloat (bug 694461)
 | 
			
		||||
	- glArePrograms/TexturesResident() wasn't 100% correct (Jose Fonseca)
 | 
			
		||||
	- fixed a minor GL_COLOR_MATERIAL bug
 | 
			
		||||
	- NV vertex program EXP instruction was broken
 | 
			
		||||
	- glColorMask misbehaved with X window / pixmap rendering
 | 
			
		||||
	- fix autoconf/libtool GLU C++ linker problem on Linux (a total hack)
 | 
			
		||||
	- attempt to fix GGI compilation problem when MesaDemos not present
 | 
			
		||||
	- NV vertex program ARL-relative fetches didn't work
 | 
			
		||||
    Changes:
 | 
			
		||||
	- use glPolygonOffset in gloss demo to avoid z-fighting artifacts
 | 
			
		||||
	- updated winpos and pointblast demos to use ARB extensions
 | 
			
		||||
	- disable SPARC normal transformation code (bug 673938)
 | 
			
		||||
	- GLU fixes for OS/2 (Evgeny Kotsuba)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,7 @@ Be warned, some of these files may be very out of date.
 | 
			
		||||
 | 
			
		||||
<H1>Release Notes</H1>
 | 
			
		||||
<UL>
 | 
			
		||||
<LI><A HREF="RELNOTES-5.0.1">RELNOTES-5.0.1</A>
 | 
			
		||||
<LI><A HREF="RELNOTES-5.0">RELNOTES-5.0</A>
 | 
			
		||||
<LI><A HREF="RELNOTES-4.1">RELNOTES-4.1</A>
 | 
			
		||||
<LI><A HREF="RELNOTES-4.0.3">RELNOTES-4.0.3</A>
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.2 for Mesa 4.1
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -37,6 +37,17 @@
 | 
			
		||||
#define DMESA_MAJOR_VERSION 5
 | 
			
		||||
#define DMESA_MINOR_VERSION 0
 | 
			
		||||
 | 
			
		||||
/* Sample Usage:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Call DMesaCreateVisual() to initialize graphics.
 | 
			
		||||
 * 2. Call DMesaCreateContext() to create a DMesa rendering context.
 | 
			
		||||
 * 3. Call DMesaCreateBuffer() to define the window.
 | 
			
		||||
 * 4. Call DMesaMakeCurrent() to bind the DMesaBuffer to a DMesaContext.
 | 
			
		||||
 * 5. Make gl* calls to render your graphics.
 | 
			
		||||
 * 6. Use DMesaSwapBuffers() when double buffering to swap front/back buffers.
 | 
			
		||||
 * 7. Before exiting, destroy DMesaBuffer, DMesaContext and DMesaVisual.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef struct dmesa_context *DMesaContext;
 | 
			
		||||
typedef struct dmesa_visual *DMesaVisual;
 | 
			
		||||
typedef struct dmesa_buffer *DMesaBuffer;
 | 
			
		||||
@@ -45,32 +56,89 @@ typedef struct dmesa_buffer *DMesaBuffer;
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
DMesaVisual DMesaCreateVisual (GLint width, GLint height,
 | 
			
		||||
                               GLint colDepth,
 | 
			
		||||
                               GLboolean dbFlag,
 | 
			
		||||
                               GLint depthSize,
 | 
			
		||||
                               GLint stencilSize,
 | 
			
		||||
                               GLint accumSize);
 | 
			
		||||
/*
 | 
			
		||||
 * Create a new Visual and set graphics mode.
 | 
			
		||||
 */
 | 
			
		||||
DMesaVisual DMesaCreateVisual (GLint width,        /* X res */
 | 
			
		||||
                               GLint height,       /* Y res */
 | 
			
		||||
                               GLint colDepth,     /* BPP */
 | 
			
		||||
                               GLint refresh,      /* refresh rate: 0=default */
 | 
			
		||||
                               GLboolean dbFlag,   /* double-buffered */
 | 
			
		||||
                               GLboolean rgbFlag,  /* RGB mode */
 | 
			
		||||
                               GLboolean alphaFlag,/* alpha buffer requested */
 | 
			
		||||
                               GLint depthSize,    /* requested bits/depth */
 | 
			
		||||
                               GLint stencilSize,  /* requested bits/stencil */
 | 
			
		||||
                               GLint accumSize);   /* requested bits/accum */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Destroy Visual and restore screen.
 | 
			
		||||
 */
 | 
			
		||||
void DMesaDestroyVisual (DMesaVisual v);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Create a new Context for rendering.
 | 
			
		||||
 */
 | 
			
		||||
DMesaContext DMesaCreateContext (DMesaVisual visual, DMesaContext share);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Destroy Context.
 | 
			
		||||
 */
 | 
			
		||||
void DMesaDestroyContext (DMesaContext c);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return a handle to the current context.
 | 
			
		||||
 */
 | 
			
		||||
DMesaContext DMesaGetCurrentContext (void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Create a new Buffer (window).
 | 
			
		||||
 */
 | 
			
		||||
DMesaBuffer DMesaCreateBuffer (DMesaVisual visual,
 | 
			
		||||
                               GLint xpos, GLint ypos,
 | 
			
		||||
                               GLint width, GLint height);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Destroy Buffer.
 | 
			
		||||
 */
 | 
			
		||||
void DMesaDestroyBuffer (DMesaBuffer b);
 | 
			
		||||
 | 
			
		||||
DMesaContext DMesaCreateContext (DMesaVisual visual, DMesaContext share);
 | 
			
		||||
 | 
			
		||||
void DMesaDestroyContext (DMesaContext c);
 | 
			
		||||
 | 
			
		||||
GLboolean DMesaViewport (DMesaBuffer b,
 | 
			
		||||
                         GLint xpos, GLint ypos,
 | 
			
		||||
                         GLint width, GLint height);
 | 
			
		||||
/*
 | 
			
		||||
 * Swap the front and back buffers for the given Buffer.
 | 
			
		||||
 * No action is taken if the buffer is not double buffered.
 | 
			
		||||
 */
 | 
			
		||||
void DMesaSwapBuffers (DMesaBuffer b);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Bind Buffer to Context and make the Context the current one.
 | 
			
		||||
 */
 | 
			
		||||
GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b);
 | 
			
		||||
 | 
			
		||||
void DMesaSwapBuffers (DMesaBuffer b);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Move/Resize current Buffer.
 | 
			
		||||
 */
 | 
			
		||||
GLboolean DMesaMoveBuffer (GLint xpos, GLint ypos);
 | 
			
		||||
GLboolean DMesaResizeBuffer (GLint width, GLint height);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Set palette index, using normalized values.
 | 
			
		||||
 */
 | 
			
		||||
void DMesaSetCI (int ndx, GLfloat red, GLfloat green, GLfloat blue);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DMesa state retrieval.
 | 
			
		||||
 */
 | 
			
		||||
#define DMESA_GET_SCREEN_SIZE 0x0100
 | 
			
		||||
#define DMESA_GET_DRIVER_CAPS 0x0200
 | 
			
		||||
 | 
			
		||||
#define DMESA_DRIVER_SWDB_BIT 0x1 /* software double-buffered */
 | 
			
		||||
#define DMESA_DRIVER_LLWO_BIT 0x2 /* lower-left window origin */
 | 
			
		||||
int DMesaGetIntegerv (GLenum pname, GLint *params);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
/* $Id: gl.h,v 1.72 2002/10/17 19:39:31 kschultz Exp $ */
 | 
			
		||||
/* $Id: gl.h,v 1.72.2.1 2003/02/28 16:29:05 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.1
 | 
			
		||||
 * Version:  5.0.1
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 1999-2003  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"),
 | 
			
		||||
@@ -2646,6 +2646,13 @@ GLAPI void GLAPIENTRY glTracePointerRangeMESA( const GLvoid* first, const GLvoid
 | 
			
		||||
#endif /* GL_APPLE_ycbcr_422 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef GL_ATI_texture_env_combine3
 | 
			
		||||
#define GL_ATI_texture_env_combine3 1
 | 
			
		||||
#define GL_MODULATE_ADD_ATI               0x8744
 | 
			
		||||
#define GL_MODULATE_SIGNED_ADD_ATI        0x8745
 | 
			
		||||
#define GL_MODULATE_SUBTRACT_ATI          0x8746
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * Begin system-specific stuff
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,14 @@
 | 
			
		||||
#if 0  /* $Id: gl_mangle.h,v 1.11 2002/01/18 14:55:40 brianp Exp $ */
 | 
			
		||||
	# DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE THIS FILE IN KORN SHELL and save the output
 | 
			
		||||
	# This file is used to create GL function protypes and aliases for the function names
 | 
			
		||||
 | 
			
		||||
#if 0  /* $Id: gl_mangle.h,v 1.11.4.1 2003/02/04 02:29:45 brianp Exp $ */
 | 
			
		||||
#define GL_MANGLE_C1 "DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE THIS FILE IN SHELL (/bin/sh) and save the output"
 | 
			
		||||
#define GL_MANGLE_C2 "This file is used to create GL function protypes and aliases for the function names"
 | 
			
		||||
	files="gl.h glext.h"
 | 
			
		||||
	#get regeneration header - copy everything in this file above the "REGENERATE_TO_END" line
 | 
			
		||||
#define GL_MANGLE_C3 "get regeneration header - copy everything in this file above the 'REGENERATE_TO_END' line"
 | 
			
		||||
	awk 	'!done; /^\/\*REGENERATE_TO_END/ {done=1}' $0
 | 
			
		||||
	echo "\n"
 | 
			
		||||
 | 
			
		||||
	#get aliases
 | 
			
		||||
	echo ""
 | 
			
		||||
#define GL_MANGLE_C4 get aliases
 | 
			
		||||
	grep '^GLAPI' $files | sed -e 's/.*ENTRY gl\([^( ]*\).*$/#define gl\1		MANGLE(\1)/' | sort | uniq
 | 
			
		||||
	echo "\n#endif /* GL_MANGLE_H */"
 | 
			
		||||
	echo ""
 | 
			
		||||
	echo "#endif /* GL_MANGLE_H */"
 | 
			
		||||
	exit
 | 
			
		||||
#endif /* REGENERATION */
 | 
			
		||||
 | 
			
		||||
@@ -34,8 +33,8 @@
 | 
			
		||||
 | 
			
		||||
/*REGENERATE_TO_END-----------ALL LINES BELOW HERE GET REPLACED ON REGENERATION */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define glAccum		MANGLE(Accum)
 | 
			
		||||
#define glActiveStencilFaceEXT		MANGLE(ActiveStencilFaceEXT)
 | 
			
		||||
#define glActiveTexture		MANGLE(ActiveTexture)
 | 
			
		||||
#define glActiveTextureARB		MANGLE(ActiveTextureARB)
 | 
			
		||||
#define glAlphaFragmentOp1ATI		MANGLE(AlphaFragmentOp1ATI)
 | 
			
		||||
@@ -52,11 +51,13 @@
 | 
			
		||||
#define glAsyncMarkerSGIX		MANGLE(AsyncMarkerSGIX)
 | 
			
		||||
#define glBegin		MANGLE(Begin)
 | 
			
		||||
#define glBeginFragmentShaderATI		MANGLE(BeginFragmentShaderATI)
 | 
			
		||||
#define glBeginOcclusionQueryNV		MANGLE(BeginOcclusionQueryNV)
 | 
			
		||||
#define glBeginVertexShaderEXT		MANGLE(BeginVertexShaderEXT)
 | 
			
		||||
#define glBindFragmentShaderATI		MANGLE(BindFragmentShaderATI)
 | 
			
		||||
#define glBindLightParameterEXT		MANGLE(BindLightParameterEXT)
 | 
			
		||||
#define glBindMaterialParameterEXT		MANGLE(BindMaterialParameterEXT)
 | 
			
		||||
#define glBindParameterEXT		MANGLE(BindParameterEXT)
 | 
			
		||||
#define glBindProgramARB		MANGLE(BindProgramARB)
 | 
			
		||||
#define glBindProgramNV		MANGLE(BindProgramNV)
 | 
			
		||||
#define glBindTexGenParameterEXT		MANGLE(BindTexGenParameterEXT)
 | 
			
		||||
#define glBindTexture		MANGLE(BindTexture)
 | 
			
		||||
@@ -80,6 +81,7 @@
 | 
			
		||||
#define glBlendEquation		MANGLE(BlendEquation)
 | 
			
		||||
#define glBlendEquationEXT		MANGLE(BlendEquationEXT)
 | 
			
		||||
#define glBlendFunc		MANGLE(BlendFunc)
 | 
			
		||||
#define glBlendFuncSeparate		MANGLE(BlendFuncSeparate)
 | 
			
		||||
#define glBlendFuncSeparateEXT		MANGLE(BlendFuncSeparateEXT)
 | 
			
		||||
#define glBlendFuncSeparateINGR		MANGLE(BlendFuncSeparateINGR)
 | 
			
		||||
#define glCallList		MANGLE(CallList)
 | 
			
		||||
@@ -92,7 +94,7 @@
 | 
			
		||||
#define glClearStencil		MANGLE(ClearStencil)
 | 
			
		||||
#define glClientActiveTexture		MANGLE(ClientActiveTexture)
 | 
			
		||||
#define glClientActiveTextureARB		MANGLE(ClientActiveTextureARB)
 | 
			
		||||
#define glClientActiveVertexStream		MANGLE(ClientActiveVertexStream)
 | 
			
		||||
#define glClientActiveVertexStreamATI		MANGLE(ClientActiveVertexStreamATI)
 | 
			
		||||
#define glClipPlane		MANGLE(ClipPlane)
 | 
			
		||||
#define glColor3b		MANGLE(Color3b)
 | 
			
		||||
#define glColor3bv		MANGLE(Color3bv)
 | 
			
		||||
@@ -214,6 +216,8 @@
 | 
			
		||||
#define glDeleteFragmentShaderATI		MANGLE(DeleteFragmentShaderATI)
 | 
			
		||||
#define glDeleteLists		MANGLE(DeleteLists)
 | 
			
		||||
#define glDeleteObjectBufferATI		MANGLE(DeleteObjectBufferATI)
 | 
			
		||||
#define glDeleteOcclusionQueriesNV		MANGLE(DeleteOcclusionQueriesNV)
 | 
			
		||||
#define glDeleteProgramsARB		MANGLE(DeleteProgramsARB)
 | 
			
		||||
#define glDeleteProgramsNV		MANGLE(DeleteProgramsNV)
 | 
			
		||||
#define glDeleteTextures		MANGLE(DeleteTextures)
 | 
			
		||||
#define glDeleteTexturesEXT		MANGLE(DeleteTexturesEXT)
 | 
			
		||||
@@ -226,11 +230,15 @@
 | 
			
		||||
#define glDisableClientState		MANGLE(DisableClientState)
 | 
			
		||||
#define glDisableTraceMESA		MANGLE(DisableTraceMESA)
 | 
			
		||||
#define glDisableVariantClientStateEXT		MANGLE(DisableVariantClientStateEXT)
 | 
			
		||||
#define glDisableVertexAttribArrayARB		MANGLE(DisableVertexAttribArrayARB)
 | 
			
		||||
#define glDrawArrays		MANGLE(DrawArrays)
 | 
			
		||||
#define glDrawArraysEXT		MANGLE(DrawArraysEXT)
 | 
			
		||||
#define glDrawBuffer		MANGLE(DrawBuffer)
 | 
			
		||||
#define glDrawElementArrayATI		MANGLE(DrawElementArrayATI)
 | 
			
		||||
#define glDrawElements		MANGLE(DrawElements)
 | 
			
		||||
#define glDrawMeshArraysSUN		MANGLE(DrawMeshArraysSUN)
 | 
			
		||||
#define glDrawPixels		MANGLE(DrawPixels)
 | 
			
		||||
#define glDrawRangeElementArrayATI		MANGLE(DrawRangeElementArrayATI)
 | 
			
		||||
#define glDrawRangeElements		MANGLE(DrawRangeElements)
 | 
			
		||||
#define glDrawRangeElementsEXT		MANGLE(DrawRangeElementsEXT)
 | 
			
		||||
#define glEdgeFlag		MANGLE(EdgeFlag)
 | 
			
		||||
@@ -238,13 +246,16 @@
 | 
			
		||||
#define glEdgeFlagPointerEXT		MANGLE(EdgeFlagPointerEXT)
 | 
			
		||||
#define glEdgeFlagPointerListIBM		MANGLE(EdgeFlagPointerListIBM)
 | 
			
		||||
#define glEdgeFlagv		MANGLE(EdgeFlagv)
 | 
			
		||||
#define glElementPointerATI		MANGLE(ElementPointerATI)
 | 
			
		||||
#define glEnable		MANGLE(Enable)
 | 
			
		||||
#define glEnableClientState		MANGLE(EnableClientState)
 | 
			
		||||
#define glEnableTraceMESA		MANGLE(EnableTraceMESA)
 | 
			
		||||
#define glEnableVariantClientStateEXT		MANGLE(EnableVariantClientStateEXT)
 | 
			
		||||
#define glEnableVertexAttribArrayARB		MANGLE(EnableVertexAttribArrayARB)
 | 
			
		||||
#define glEnd		MANGLE(End)
 | 
			
		||||
#define glEndFragmentShaderATI		MANGLE(EndFragmentShaderATI)
 | 
			
		||||
#define glEndList		MANGLE(EndList)
 | 
			
		||||
#define glEndOcclusionQueryNV		MANGLE(EndOcclusionQueryNV)
 | 
			
		||||
#define glEndTraceMESA		MANGLE(EndTraceMESA)
 | 
			
		||||
#define glEndVertexShaderEXT		MANGLE(EndVertexShaderEXT)
 | 
			
		||||
#define glEvalCoord1d		MANGLE(EvalCoord1d)
 | 
			
		||||
@@ -271,11 +282,16 @@
 | 
			
		||||
#define glFlush		MANGLE(Flush)
 | 
			
		||||
#define glFlushRasterSGIX		MANGLE(FlushRasterSGIX)
 | 
			
		||||
#define glFlushVertexArrayRangeNV		MANGLE(FlushVertexArrayRangeNV)
 | 
			
		||||
#define glFogCoordPointer		MANGLE(FogCoordPointer)
 | 
			
		||||
#define glFogCoordPointerEXT		MANGLE(FogCoordPointerEXT)
 | 
			
		||||
#define glFogCoordPointerListIBM		MANGLE(FogCoordPointerListIBM)
 | 
			
		||||
#define glFogCoordd		MANGLE(FogCoordd)
 | 
			
		||||
#define glFogCoorddEXT		MANGLE(FogCoorddEXT)
 | 
			
		||||
#define glFogCoorddv		MANGLE(FogCoorddv)
 | 
			
		||||
#define glFogCoorddvEXT		MANGLE(FogCoorddvEXT)
 | 
			
		||||
#define glFogCoordf		MANGLE(FogCoordf)
 | 
			
		||||
#define glFogCoordfEXT		MANGLE(FogCoordfEXT)
 | 
			
		||||
#define glFogCoordfv		MANGLE(FogCoordfv)
 | 
			
		||||
#define glFogCoordfvEXT		MANGLE(FogCoordfvEXT)
 | 
			
		||||
#define glFogFuncSGIS		MANGLE(FogFuncSGIS)
 | 
			
		||||
#define glFogf		MANGLE(Fogf)
 | 
			
		||||
@@ -302,6 +318,8 @@
 | 
			
		||||
#define glGenFencesNV		MANGLE(GenFencesNV)
 | 
			
		||||
#define glGenFragmentShadersATI		MANGLE(GenFragmentShadersATI)
 | 
			
		||||
#define glGenLists		MANGLE(GenLists)
 | 
			
		||||
#define glGenOcclusionQueriesNV		MANGLE(GenOcclusionQueriesNV)
 | 
			
		||||
#define glGenProgramsARB		MANGLE(GenProgramsARB)
 | 
			
		||||
#define glGenProgramsNV		MANGLE(GenProgramsNV)
 | 
			
		||||
#define glGenSymbolsEXT		MANGLE(GenSymbolsEXT)
 | 
			
		||||
#define glGenTextures		MANGLE(GenTextures)
 | 
			
		||||
@@ -383,6 +401,8 @@
 | 
			
		||||
#define glGetMinmaxParameterivEXT		MANGLE(GetMinmaxParameterivEXT)
 | 
			
		||||
#define glGetObjectBufferfvATI		MANGLE(GetObjectBufferfvATI)
 | 
			
		||||
#define glGetObjectBufferivATI		MANGLE(GetObjectBufferivATI)
 | 
			
		||||
#define glGetOcclusionQueryivNV		MANGLE(GetOcclusionQueryivNV)
 | 
			
		||||
#define glGetOcclusionQueryuivNV		MANGLE(GetOcclusionQueryuivNV)
 | 
			
		||||
#define glGetPixelMapfv		MANGLE(GetPixelMapfv)
 | 
			
		||||
#define glGetPixelMapuiv		MANGLE(GetPixelMapuiv)
 | 
			
		||||
#define glGetPixelMapusv		MANGLE(GetPixelMapusv)
 | 
			
		||||
@@ -391,9 +411,15 @@
 | 
			
		||||
#define glGetPointerv		MANGLE(GetPointerv)
 | 
			
		||||
#define glGetPointervEXT		MANGLE(GetPointervEXT)
 | 
			
		||||
#define glGetPolygonStipple		MANGLE(GetPolygonStipple)
 | 
			
		||||
#define glGetProgramEnvParameterdvARB		MANGLE(GetProgramEnvParameterdvARB)
 | 
			
		||||
#define glGetProgramEnvParameterfvARB		MANGLE(GetProgramEnvParameterfvARB)
 | 
			
		||||
#define glGetProgramLocalParameterdvARB		MANGLE(GetProgramLocalParameterdvARB)
 | 
			
		||||
#define glGetProgramLocalParameterfvARB		MANGLE(GetProgramLocalParameterfvARB)
 | 
			
		||||
#define glGetProgramParameterdvNV		MANGLE(GetProgramParameterdvNV)
 | 
			
		||||
#define glGetProgramParameterfvNV		MANGLE(GetProgramParameterfvNV)
 | 
			
		||||
#define glGetProgramStringARB		MANGLE(GetProgramStringARB)
 | 
			
		||||
#define glGetProgramStringNV		MANGLE(GetProgramStringNV)
 | 
			
		||||
#define glGetProgramivARB		MANGLE(GetProgramivARB)
 | 
			
		||||
#define glGetProgramivNV		MANGLE(GetProgramivNV)
 | 
			
		||||
#define glGetSeparableFilter		MANGLE(GetSeparableFilter)
 | 
			
		||||
#define glGetSeparableFilterEXT		MANGLE(GetSeparableFilterEXT)
 | 
			
		||||
@@ -419,9 +445,13 @@
 | 
			
		||||
#define glGetVariantFloatvEXT		MANGLE(GetVariantFloatvEXT)
 | 
			
		||||
#define glGetVariantIntegervEXT		MANGLE(GetVariantIntegervEXT)
 | 
			
		||||
#define glGetVariantPointervEXT		MANGLE(GetVariantPointervEXT)
 | 
			
		||||
#define glGetVertexAttribPointervARB		MANGLE(GetVertexAttribPointervARB)
 | 
			
		||||
#define glGetVertexAttribPointervNV		MANGLE(GetVertexAttribPointervNV)
 | 
			
		||||
#define glGetVertexAttribdvARB		MANGLE(GetVertexAttribdvARB)
 | 
			
		||||
#define glGetVertexAttribdvNV		MANGLE(GetVertexAttribdvNV)
 | 
			
		||||
#define glGetVertexAttribfvARB		MANGLE(GetVertexAttribfvARB)
 | 
			
		||||
#define glGetVertexAttribfvNV		MANGLE(GetVertexAttribfvNV)
 | 
			
		||||
#define glGetVertexAttribivARB		MANGLE(GetVertexAttribivARB)
 | 
			
		||||
#define glGetVertexAttribivNV		MANGLE(GetVertexAttribivNV)
 | 
			
		||||
#define glGlobalAlphaFactorbSUN		MANGLE(GlobalAlphaFactorbSUN)
 | 
			
		||||
#define glGlobalAlphaFactordSUN		MANGLE(GlobalAlphaFactordSUN)
 | 
			
		||||
@@ -465,6 +495,8 @@
 | 
			
		||||
#define glIsFenceNV		MANGLE(IsFenceNV)
 | 
			
		||||
#define glIsList		MANGLE(IsList)
 | 
			
		||||
#define glIsObjectBufferATI		MANGLE(IsObjectBufferATI)
 | 
			
		||||
#define glIsOcclusionQueryNV		MANGLE(IsOcclusionQueryNV)
 | 
			
		||||
#define glIsProgramARB		MANGLE(IsProgramARB)
 | 
			
		||||
#define glIsProgramNV		MANGLE(IsProgramNV)
 | 
			
		||||
#define glIsTexture		MANGLE(IsTexture)
 | 
			
		||||
#define glIsTextureEXT		MANGLE(IsTextureEXT)
 | 
			
		||||
@@ -525,7 +557,9 @@
 | 
			
		||||
#define glMultTransposeMatrixdARB		MANGLE(MultTransposeMatrixdARB)
 | 
			
		||||
#define glMultTransposeMatrixf		MANGLE(MultTransposeMatrixf)
 | 
			
		||||
#define glMultTransposeMatrixfARB		MANGLE(MultTransposeMatrixfARB)
 | 
			
		||||
#define glMultiDrawArrays		MANGLE(MultiDrawArrays)
 | 
			
		||||
#define glMultiDrawArraysEXT		MANGLE(MultiDrawArraysEXT)
 | 
			
		||||
#define glMultiDrawElements		MANGLE(MultiDrawElements)
 | 
			
		||||
#define glMultiDrawElementsEXT		MANGLE(MultiDrawElementsEXT)
 | 
			
		||||
#define glMultiModeDrawArraysIBM		MANGLE(MultiModeDrawArraysIBM)
 | 
			
		||||
#define glMultiModeDrawElementsIBM		MANGLE(MultiModeDrawElementsIBM)
 | 
			
		||||
@@ -612,16 +646,16 @@
 | 
			
		||||
#define glNormalPointerEXT		MANGLE(NormalPointerEXT)
 | 
			
		||||
#define glNormalPointerListIBM		MANGLE(NormalPointerListIBM)
 | 
			
		||||
#define glNormalPointervINTEL		MANGLE(NormalPointervINTEL)
 | 
			
		||||
#define glNormalStream3b		MANGLE(NormalStream3b)
 | 
			
		||||
#define glNormalStream3bv		MANGLE(NormalStream3bv)
 | 
			
		||||
#define glNormalStream3d		MANGLE(NormalStream3d)
 | 
			
		||||
#define glNormalStream3dv		MANGLE(NormalStream3dv)
 | 
			
		||||
#define glNormalStream3f		MANGLE(NormalStream3f)
 | 
			
		||||
#define glNormalStream3fv		MANGLE(NormalStream3fv)
 | 
			
		||||
#define glNormalStream3i		MANGLE(NormalStream3i)
 | 
			
		||||
#define glNormalStream3iv		MANGLE(NormalStream3iv)
 | 
			
		||||
#define glNormalStream3s		MANGLE(NormalStream3s)
 | 
			
		||||
#define glNormalStream3sv		MANGLE(NormalStream3sv)
 | 
			
		||||
#define glNormalStream3bATI		MANGLE(NormalStream3bATI)
 | 
			
		||||
#define glNormalStream3bvATI		MANGLE(NormalStream3bvATI)
 | 
			
		||||
#define glNormalStream3dATI		MANGLE(NormalStream3dATI)
 | 
			
		||||
#define glNormalStream3dvATI		MANGLE(NormalStream3dvATI)
 | 
			
		||||
#define glNormalStream3fATI		MANGLE(NormalStream3fATI)
 | 
			
		||||
#define glNormalStream3fvATI		MANGLE(NormalStream3fvATI)
 | 
			
		||||
#define glNormalStream3iATI		MANGLE(NormalStream3iATI)
 | 
			
		||||
#define glNormalStream3ivATI		MANGLE(NormalStream3ivATI)
 | 
			
		||||
#define glNormalStream3sATI		MANGLE(NormalStream3sATI)
 | 
			
		||||
#define glNormalStream3svATI		MANGLE(NormalStream3svATI)
 | 
			
		||||
#define glOrtho		MANGLE(Ortho)
 | 
			
		||||
#define glPNTrianglesfATI		MANGLE(PNTrianglesfATI)
 | 
			
		||||
#define glPNTrianglesiATI		MANGLE(PNTrianglesiATI)
 | 
			
		||||
@@ -644,12 +678,18 @@
 | 
			
		||||
#define glPixelTransformParameteriEXT		MANGLE(PixelTransformParameteriEXT)
 | 
			
		||||
#define glPixelTransformParameterivEXT		MANGLE(PixelTransformParameterivEXT)
 | 
			
		||||
#define glPixelZoom		MANGLE(PixelZoom)
 | 
			
		||||
#define glPointParameterf		MANGLE(PointParameterf)
 | 
			
		||||
#define glPointParameterfARB		MANGLE(PointParameterfARB)
 | 
			
		||||
#define glPointParameterfEXT		MANGLE(PointParameterfEXT)
 | 
			
		||||
#define glPointParameterfSGIS		MANGLE(PointParameterfSGIS)
 | 
			
		||||
#define glPointParameterfv		MANGLE(PointParameterfv)
 | 
			
		||||
#define glPointParameterfvARB		MANGLE(PointParameterfvARB)
 | 
			
		||||
#define glPointParameterfvEXT		MANGLE(PointParameterfvEXT)
 | 
			
		||||
#define glPointParameterfvSGIS		MANGLE(PointParameterfvSGIS)
 | 
			
		||||
#define glPointParameteri		MANGLE(PointParameteri)
 | 
			
		||||
#define glPointParameteriNV		MANGLE(PointParameteriNV)
 | 
			
		||||
#define glPointParameteriv		MANGLE(PointParameteriv)
 | 
			
		||||
#define glPointParameterivNV		MANGLE(PointParameterivNV)
 | 
			
		||||
#define glPointSize		MANGLE(PointSize)
 | 
			
		||||
#define glPollAsyncSGIX		MANGLE(PollAsyncSGIX)
 | 
			
		||||
#define glPollInstrumentsSGIX		MANGLE(PollInstrumentsSGIX)
 | 
			
		||||
@@ -663,12 +703,21 @@
 | 
			
		||||
#define glPopName		MANGLE(PopName)
 | 
			
		||||
#define glPrioritizeTextures		MANGLE(PrioritizeTextures)
 | 
			
		||||
#define glPrioritizeTexturesEXT		MANGLE(PrioritizeTexturesEXT)
 | 
			
		||||
#define glProgramEnvParameter4dARB		MANGLE(ProgramEnvParameter4dARB)
 | 
			
		||||
#define glProgramEnvParameter4dvARB		MANGLE(ProgramEnvParameter4dvARB)
 | 
			
		||||
#define glProgramEnvParameter4fARB		MANGLE(ProgramEnvParameter4fARB)
 | 
			
		||||
#define glProgramEnvParameter4fvARB		MANGLE(ProgramEnvParameter4fvARB)
 | 
			
		||||
#define glProgramLocalParameter4dARB		MANGLE(ProgramLocalParameter4dARB)
 | 
			
		||||
#define glProgramLocalParameter4dvARB		MANGLE(ProgramLocalParameter4dvARB)
 | 
			
		||||
#define glProgramLocalParameter4fARB		MANGLE(ProgramLocalParameter4fARB)
 | 
			
		||||
#define glProgramLocalParameter4fvARB		MANGLE(ProgramLocalParameter4fvARB)
 | 
			
		||||
#define glProgramParameter4dNV		MANGLE(ProgramParameter4dNV)
 | 
			
		||||
#define glProgramParameter4dvNV		MANGLE(ProgramParameter4dvNV)
 | 
			
		||||
#define glProgramParameter4fNV		MANGLE(ProgramParameter4fNV)
 | 
			
		||||
#define glProgramParameter4fvNV		MANGLE(ProgramParameter4fvNV)
 | 
			
		||||
#define glProgramParameters4dvNV		MANGLE(ProgramParameters4dvNV)
 | 
			
		||||
#define glProgramParameters4fvNV		MANGLE(ProgramParameters4fvNV)
 | 
			
		||||
#define glProgramStringARB		MANGLE(ProgramStringARB)
 | 
			
		||||
#define glPushAttrib		MANGLE(PushAttrib)
 | 
			
		||||
#define glPushClientAttrib		MANGLE(PushClientAttrib)
 | 
			
		||||
#define glPushMatrix		MANGLE(PushMatrix)
 | 
			
		||||
@@ -746,28 +795,44 @@
 | 
			
		||||
#define glSampleMapATI		MANGLE(SampleMapATI)
 | 
			
		||||
#define glSampleMaskEXT		MANGLE(SampleMaskEXT)
 | 
			
		||||
#define glSampleMaskSGIS		MANGLE(SampleMaskSGIS)
 | 
			
		||||
#define glSamplePass		MANGLE(SamplePass)
 | 
			
		||||
#define glSamplePatternEXT		MANGLE(SamplePatternEXT)
 | 
			
		||||
#define glSamplePatternSGIS		MANGLE(SamplePatternSGIS)
 | 
			
		||||
#define glScaled		MANGLE(Scaled)
 | 
			
		||||
#define glScalef		MANGLE(Scalef)
 | 
			
		||||
#define glScissor		MANGLE(Scissor)
 | 
			
		||||
#define glSecondaryColor3b		MANGLE(SecondaryColor3b)
 | 
			
		||||
#define glSecondaryColor3bEXT		MANGLE(SecondaryColor3bEXT)
 | 
			
		||||
#define glSecondaryColor3bv		MANGLE(SecondaryColor3bv)
 | 
			
		||||
#define glSecondaryColor3bvEXT		MANGLE(SecondaryColor3bvEXT)
 | 
			
		||||
#define glSecondaryColor3d		MANGLE(SecondaryColor3d)
 | 
			
		||||
#define glSecondaryColor3dEXT		MANGLE(SecondaryColor3dEXT)
 | 
			
		||||
#define glSecondaryColor3dv		MANGLE(SecondaryColor3dv)
 | 
			
		||||
#define glSecondaryColor3dvEXT		MANGLE(SecondaryColor3dvEXT)
 | 
			
		||||
#define glSecondaryColor3f		MANGLE(SecondaryColor3f)
 | 
			
		||||
#define glSecondaryColor3fEXT		MANGLE(SecondaryColor3fEXT)
 | 
			
		||||
#define glSecondaryColor3fv		MANGLE(SecondaryColor3fv)
 | 
			
		||||
#define glSecondaryColor3fvEXT		MANGLE(SecondaryColor3fvEXT)
 | 
			
		||||
#define glSecondaryColor3i		MANGLE(SecondaryColor3i)
 | 
			
		||||
#define glSecondaryColor3iEXT		MANGLE(SecondaryColor3iEXT)
 | 
			
		||||
#define glSecondaryColor3iv		MANGLE(SecondaryColor3iv)
 | 
			
		||||
#define glSecondaryColor3ivEXT		MANGLE(SecondaryColor3ivEXT)
 | 
			
		||||
#define glSecondaryColor3s		MANGLE(SecondaryColor3s)
 | 
			
		||||
#define glSecondaryColor3sEXT		MANGLE(SecondaryColor3sEXT)
 | 
			
		||||
#define glSecondaryColor3sv		MANGLE(SecondaryColor3sv)
 | 
			
		||||
#define glSecondaryColor3svEXT		MANGLE(SecondaryColor3svEXT)
 | 
			
		||||
#define glSecondaryColor3ub		MANGLE(SecondaryColor3ub)
 | 
			
		||||
#define glSecondaryColor3ubEXT		MANGLE(SecondaryColor3ubEXT)
 | 
			
		||||
#define glSecondaryColor3ubv		MANGLE(SecondaryColor3ubv)
 | 
			
		||||
#define glSecondaryColor3ubvEXT		MANGLE(SecondaryColor3ubvEXT)
 | 
			
		||||
#define glSecondaryColor3ui		MANGLE(SecondaryColor3ui)
 | 
			
		||||
#define glSecondaryColor3uiEXT		MANGLE(SecondaryColor3uiEXT)
 | 
			
		||||
#define glSecondaryColor3uiv		MANGLE(SecondaryColor3uiv)
 | 
			
		||||
#define glSecondaryColor3uivEXT		MANGLE(SecondaryColor3uivEXT)
 | 
			
		||||
#define glSecondaryColor3us		MANGLE(SecondaryColor3us)
 | 
			
		||||
#define glSecondaryColor3usEXT		MANGLE(SecondaryColor3usEXT)
 | 
			
		||||
#define glSecondaryColor3usv		MANGLE(SecondaryColor3usv)
 | 
			
		||||
#define glSecondaryColor3usvEXT		MANGLE(SecondaryColor3usvEXT)
 | 
			
		||||
#define glSecondaryColorPointer		MANGLE(SecondaryColorPointer)
 | 
			
		||||
#define glSecondaryColorPointerEXT		MANGLE(SecondaryColorPointerEXT)
 | 
			
		||||
#define glSecondaryColorPointerListIBM		MANGLE(SecondaryColorPointerListIBM)
 | 
			
		||||
#define glSelectBuffer		MANGLE(SelectBuffer)
 | 
			
		||||
@@ -935,32 +1000,69 @@
 | 
			
		||||
#define glVertex4s		MANGLE(Vertex4s)
 | 
			
		||||
#define glVertex4sv		MANGLE(Vertex4sv)
 | 
			
		||||
#define glVertexArrayRangeNV		MANGLE(VertexArrayRangeNV)
 | 
			
		||||
#define glVertexAttrib1dARB		MANGLE(VertexAttrib1dARB)
 | 
			
		||||
#define glVertexAttrib1dNV		MANGLE(VertexAttrib1dNV)
 | 
			
		||||
#define glVertexAttrib1dvARB		MANGLE(VertexAttrib1dvARB)
 | 
			
		||||
#define glVertexAttrib1dvNV		MANGLE(VertexAttrib1dvNV)
 | 
			
		||||
#define glVertexAttrib1fARB		MANGLE(VertexAttrib1fARB)
 | 
			
		||||
#define glVertexAttrib1fNV		MANGLE(VertexAttrib1fNV)
 | 
			
		||||
#define glVertexAttrib1fvARB		MANGLE(VertexAttrib1fvARB)
 | 
			
		||||
#define glVertexAttrib1fvNV		MANGLE(VertexAttrib1fvNV)
 | 
			
		||||
#define glVertexAttrib1sARB		MANGLE(VertexAttrib1sARB)
 | 
			
		||||
#define glVertexAttrib1sNV		MANGLE(VertexAttrib1sNV)
 | 
			
		||||
#define glVertexAttrib1svARB		MANGLE(VertexAttrib1svARB)
 | 
			
		||||
#define glVertexAttrib1svNV		MANGLE(VertexAttrib1svNV)
 | 
			
		||||
#define glVertexAttrib2dARB		MANGLE(VertexAttrib2dARB)
 | 
			
		||||
#define glVertexAttrib2dNV		MANGLE(VertexAttrib2dNV)
 | 
			
		||||
#define glVertexAttrib2dvARB		MANGLE(VertexAttrib2dvARB)
 | 
			
		||||
#define glVertexAttrib2dvNV		MANGLE(VertexAttrib2dvNV)
 | 
			
		||||
#define glVertexAttrib2fARB		MANGLE(VertexAttrib2fARB)
 | 
			
		||||
#define glVertexAttrib2fNV		MANGLE(VertexAttrib2fNV)
 | 
			
		||||
#define glVertexAttrib2fvARB		MANGLE(VertexAttrib2fvARB)
 | 
			
		||||
#define glVertexAttrib2fvNV		MANGLE(VertexAttrib2fvNV)
 | 
			
		||||
#define glVertexAttrib2sARB		MANGLE(VertexAttrib2sARB)
 | 
			
		||||
#define glVertexAttrib2sNV		MANGLE(VertexAttrib2sNV)
 | 
			
		||||
#define glVertexAttrib2svARB		MANGLE(VertexAttrib2svARB)
 | 
			
		||||
#define glVertexAttrib2svNV		MANGLE(VertexAttrib2svNV)
 | 
			
		||||
#define glVertexAttrib3dARB		MANGLE(VertexAttrib3dARB)
 | 
			
		||||
#define glVertexAttrib3dNV		MANGLE(VertexAttrib3dNV)
 | 
			
		||||
#define glVertexAttrib3dvARB		MANGLE(VertexAttrib3dvARB)
 | 
			
		||||
#define glVertexAttrib3dvNV		MANGLE(VertexAttrib3dvNV)
 | 
			
		||||
#define glVertexAttrib3fARB		MANGLE(VertexAttrib3fARB)
 | 
			
		||||
#define glVertexAttrib3fNV		MANGLE(VertexAttrib3fNV)
 | 
			
		||||
#define glVertexAttrib3fvARB		MANGLE(VertexAttrib3fvARB)
 | 
			
		||||
#define glVertexAttrib3fvNV		MANGLE(VertexAttrib3fvNV)
 | 
			
		||||
#define glVertexAttrib3sARB		MANGLE(VertexAttrib3sARB)
 | 
			
		||||
#define glVertexAttrib3sNV		MANGLE(VertexAttrib3sNV)
 | 
			
		||||
#define glVertexAttrib3svARB		MANGLE(VertexAttrib3svARB)
 | 
			
		||||
#define glVertexAttrib3svNV		MANGLE(VertexAttrib3svNV)
 | 
			
		||||
#define glVertexAttrib4NbvARB		MANGLE(VertexAttrib4NbvARB)
 | 
			
		||||
#define glVertexAttrib4NivARB		MANGLE(VertexAttrib4NivARB)
 | 
			
		||||
#define glVertexAttrib4NsvARB		MANGLE(VertexAttrib4NsvARB)
 | 
			
		||||
#define glVertexAttrib4NubARB		MANGLE(VertexAttrib4NubARB)
 | 
			
		||||
#define glVertexAttrib4NubvARB		MANGLE(VertexAttrib4NubvARB)
 | 
			
		||||
#define glVertexAttrib4NuivARB		MANGLE(VertexAttrib4NuivARB)
 | 
			
		||||
#define glVertexAttrib4NusvARB		MANGLE(VertexAttrib4NusvARB)
 | 
			
		||||
#define glVertexAttrib4bvARB		MANGLE(VertexAttrib4bvARB)
 | 
			
		||||
#define glVertexAttrib4dARB		MANGLE(VertexAttrib4dARB)
 | 
			
		||||
#define glVertexAttrib4dNV		MANGLE(VertexAttrib4dNV)
 | 
			
		||||
#define glVertexAttrib4dvARB		MANGLE(VertexAttrib4dvARB)
 | 
			
		||||
#define glVertexAttrib4dvNV		MANGLE(VertexAttrib4dvNV)
 | 
			
		||||
#define glVertexAttrib4fARB		MANGLE(VertexAttrib4fARB)
 | 
			
		||||
#define glVertexAttrib4fNV		MANGLE(VertexAttrib4fNV)
 | 
			
		||||
#define glVertexAttrib4fvARB		MANGLE(VertexAttrib4fvARB)
 | 
			
		||||
#define glVertexAttrib4fvNV		MANGLE(VertexAttrib4fvNV)
 | 
			
		||||
#define glVertexAttrib4ivARB		MANGLE(VertexAttrib4ivARB)
 | 
			
		||||
#define glVertexAttrib4sARB		MANGLE(VertexAttrib4sARB)
 | 
			
		||||
#define glVertexAttrib4sNV		MANGLE(VertexAttrib4sNV)
 | 
			
		||||
#define glVertexAttrib4svARB		MANGLE(VertexAttrib4svARB)
 | 
			
		||||
#define glVertexAttrib4svNV		MANGLE(VertexAttrib4svNV)
 | 
			
		||||
#define glVertexAttrib4ubNV		MANGLE(VertexAttrib4ubNV)
 | 
			
		||||
#define glVertexAttrib4ubvARB		MANGLE(VertexAttrib4ubvARB)
 | 
			
		||||
#define glVertexAttrib4ubvNV		MANGLE(VertexAttrib4ubvNV)
 | 
			
		||||
#define glVertexAttrib4uivARB		MANGLE(VertexAttrib4uivARB)
 | 
			
		||||
#define glVertexAttrib4usvARB		MANGLE(VertexAttrib4usvARB)
 | 
			
		||||
#define glVertexAttribPointerARB		MANGLE(VertexAttribPointerARB)
 | 
			
		||||
#define glVertexAttribPointerNV		MANGLE(VertexAttribPointerNV)
 | 
			
		||||
#define glVertexAttribs1dvNV		MANGLE(VertexAttribs1dvNV)
 | 
			
		||||
#define glVertexAttribs1fvNV		MANGLE(VertexAttribs1fvNV)
 | 
			
		||||
@@ -976,44 +1078,44 @@
 | 
			
		||||
#define glVertexAttribs4svNV		MANGLE(VertexAttribs4svNV)
 | 
			
		||||
#define glVertexAttribs4ubvNV		MANGLE(VertexAttribs4ubvNV)
 | 
			
		||||
#define glVertexBlendARB		MANGLE(VertexBlendARB)
 | 
			
		||||
#define glVertexBlendEnvf		MANGLE(VertexBlendEnvf)
 | 
			
		||||
#define glVertexBlendEnvi		MANGLE(VertexBlendEnvi)
 | 
			
		||||
#define glVertexBlendEnvfATI		MANGLE(VertexBlendEnvfATI)
 | 
			
		||||
#define glVertexBlendEnviATI		MANGLE(VertexBlendEnviATI)
 | 
			
		||||
#define glVertexPointer		MANGLE(VertexPointer)
 | 
			
		||||
#define glVertexPointerEXT		MANGLE(VertexPointerEXT)
 | 
			
		||||
#define glVertexPointerListIBM		MANGLE(VertexPointerListIBM)
 | 
			
		||||
#define glVertexPointervINTEL		MANGLE(VertexPointervINTEL)
 | 
			
		||||
#define glVertexStream1d		MANGLE(VertexStream1d)
 | 
			
		||||
#define glVertexStream1dv		MANGLE(VertexStream1dv)
 | 
			
		||||
#define glVertexStream1f		MANGLE(VertexStream1f)
 | 
			
		||||
#define glVertexStream1fv		MANGLE(VertexStream1fv)
 | 
			
		||||
#define glVertexStream1i		MANGLE(VertexStream1i)
 | 
			
		||||
#define glVertexStream1iv		MANGLE(VertexStream1iv)
 | 
			
		||||
#define glVertexStream1s		MANGLE(VertexStream1s)
 | 
			
		||||
#define glVertexStream1sv		MANGLE(VertexStream1sv)
 | 
			
		||||
#define glVertexStream2d		MANGLE(VertexStream2d)
 | 
			
		||||
#define glVertexStream2dv		MANGLE(VertexStream2dv)
 | 
			
		||||
#define glVertexStream2f		MANGLE(VertexStream2f)
 | 
			
		||||
#define glVertexStream2fv		MANGLE(VertexStream2fv)
 | 
			
		||||
#define glVertexStream2i		MANGLE(VertexStream2i)
 | 
			
		||||
#define glVertexStream2iv		MANGLE(VertexStream2iv)
 | 
			
		||||
#define glVertexStream2s		MANGLE(VertexStream2s)
 | 
			
		||||
#define glVertexStream2sv		MANGLE(VertexStream2sv)
 | 
			
		||||
#define glVertexStream3d		MANGLE(VertexStream3d)
 | 
			
		||||
#define glVertexStream3dv		MANGLE(VertexStream3dv)
 | 
			
		||||
#define glVertexStream3f		MANGLE(VertexStream3f)
 | 
			
		||||
#define glVertexStream3fv		MANGLE(VertexStream3fv)
 | 
			
		||||
#define glVertexStream3i		MANGLE(VertexStream3i)
 | 
			
		||||
#define glVertexStream3iv		MANGLE(VertexStream3iv)
 | 
			
		||||
#define glVertexStream3s		MANGLE(VertexStream3s)
 | 
			
		||||
#define glVertexStream3sv		MANGLE(VertexStream3sv)
 | 
			
		||||
#define glVertexStream4d		MANGLE(VertexStream4d)
 | 
			
		||||
#define glVertexStream4dv		MANGLE(VertexStream4dv)
 | 
			
		||||
#define glVertexStream4f		MANGLE(VertexStream4f)
 | 
			
		||||
#define glVertexStream4fv		MANGLE(VertexStream4fv)
 | 
			
		||||
#define glVertexStream4i		MANGLE(VertexStream4i)
 | 
			
		||||
#define glVertexStream4iv		MANGLE(VertexStream4iv)
 | 
			
		||||
#define glVertexStream4s		MANGLE(VertexStream4s)
 | 
			
		||||
#define glVertexStream4sv		MANGLE(VertexStream4sv)
 | 
			
		||||
#define glVertexStream1dATI		MANGLE(VertexStream1dATI)
 | 
			
		||||
#define glVertexStream1dvATI		MANGLE(VertexStream1dvATI)
 | 
			
		||||
#define glVertexStream1fATI		MANGLE(VertexStream1fATI)
 | 
			
		||||
#define glVertexStream1fvATI		MANGLE(VertexStream1fvATI)
 | 
			
		||||
#define glVertexStream1iATI		MANGLE(VertexStream1iATI)
 | 
			
		||||
#define glVertexStream1ivATI		MANGLE(VertexStream1ivATI)
 | 
			
		||||
#define glVertexStream1sATI		MANGLE(VertexStream1sATI)
 | 
			
		||||
#define glVertexStream1svATI		MANGLE(VertexStream1svATI)
 | 
			
		||||
#define glVertexStream2dATI		MANGLE(VertexStream2dATI)
 | 
			
		||||
#define glVertexStream2dvATI		MANGLE(VertexStream2dvATI)
 | 
			
		||||
#define glVertexStream2fATI		MANGLE(VertexStream2fATI)
 | 
			
		||||
#define glVertexStream2fvATI		MANGLE(VertexStream2fvATI)
 | 
			
		||||
#define glVertexStream2iATI		MANGLE(VertexStream2iATI)
 | 
			
		||||
#define glVertexStream2ivATI		MANGLE(VertexStream2ivATI)
 | 
			
		||||
#define glVertexStream2sATI		MANGLE(VertexStream2sATI)
 | 
			
		||||
#define glVertexStream2svATI		MANGLE(VertexStream2svATI)
 | 
			
		||||
#define glVertexStream3dATI		MANGLE(VertexStream3dATI)
 | 
			
		||||
#define glVertexStream3dvATI		MANGLE(VertexStream3dvATI)
 | 
			
		||||
#define glVertexStream3fATI		MANGLE(VertexStream3fATI)
 | 
			
		||||
#define glVertexStream3fvATI		MANGLE(VertexStream3fvATI)
 | 
			
		||||
#define glVertexStream3iATI		MANGLE(VertexStream3iATI)
 | 
			
		||||
#define glVertexStream3ivATI		MANGLE(VertexStream3ivATI)
 | 
			
		||||
#define glVertexStream3sATI		MANGLE(VertexStream3sATI)
 | 
			
		||||
#define glVertexStream3svATI		MANGLE(VertexStream3svATI)
 | 
			
		||||
#define glVertexStream4dATI		MANGLE(VertexStream4dATI)
 | 
			
		||||
#define glVertexStream4dvATI		MANGLE(VertexStream4dvATI)
 | 
			
		||||
#define glVertexStream4fATI		MANGLE(VertexStream4fATI)
 | 
			
		||||
#define glVertexStream4fvATI		MANGLE(VertexStream4fvATI)
 | 
			
		||||
#define glVertexStream4iATI		MANGLE(VertexStream4iATI)
 | 
			
		||||
#define glVertexStream4ivATI		MANGLE(VertexStream4ivATI)
 | 
			
		||||
#define glVertexStream4sATI		MANGLE(VertexStream4sATI)
 | 
			
		||||
#define glVertexStream4svATI		MANGLE(VertexStream4svATI)
 | 
			
		||||
#define glVertexWeightPointerEXT		MANGLE(VertexWeightPointerEXT)
 | 
			
		||||
#define glVertexWeightfEXT		MANGLE(VertexWeightfEXT)
 | 
			
		||||
#define glVertexWeightfvEXT		MANGLE(VertexWeightfvEXT)
 | 
			
		||||
@@ -1027,21 +1129,53 @@
 | 
			
		||||
#define glWeightubvARB		MANGLE(WeightubvARB)
 | 
			
		||||
#define glWeightuivARB		MANGLE(WeightuivARB)
 | 
			
		||||
#define glWeightusvARB		MANGLE(WeightusvARB)
 | 
			
		||||
#define glWindowPos2d		MANGLE(WindowPos2d)
 | 
			
		||||
#define glWindowPos2dARB		MANGLE(WindowPos2dARB)
 | 
			
		||||
#define glWindowPos2dMESA		MANGLE(WindowPos2dMESA)
 | 
			
		||||
#define glWindowPos2dv		MANGLE(WindowPos2dv)
 | 
			
		||||
#define glWindowPos2dvARB		MANGLE(WindowPos2dvARB)
 | 
			
		||||
#define glWindowPos2dvMESA		MANGLE(WindowPos2dvMESA)
 | 
			
		||||
#define glWindowPos2f		MANGLE(WindowPos2f)
 | 
			
		||||
#define glWindowPos2fARB		MANGLE(WindowPos2fARB)
 | 
			
		||||
#define glWindowPos2fMESA		MANGLE(WindowPos2fMESA)
 | 
			
		||||
#define glWindowPos2fv		MANGLE(WindowPos2fv)
 | 
			
		||||
#define glWindowPos2fvARB		MANGLE(WindowPos2fvARB)
 | 
			
		||||
#define glWindowPos2fvMESA		MANGLE(WindowPos2fvMESA)
 | 
			
		||||
#define glWindowPos2i		MANGLE(WindowPos2i)
 | 
			
		||||
#define glWindowPos2iARB		MANGLE(WindowPos2iARB)
 | 
			
		||||
#define glWindowPos2iMESA		MANGLE(WindowPos2iMESA)
 | 
			
		||||
#define glWindowPos2iv		MANGLE(WindowPos2iv)
 | 
			
		||||
#define glWindowPos2ivARB		MANGLE(WindowPos2ivARB)
 | 
			
		||||
#define glWindowPos2ivMESA		MANGLE(WindowPos2ivMESA)
 | 
			
		||||
#define glWindowPos2s		MANGLE(WindowPos2s)
 | 
			
		||||
#define glWindowPos2sARB		MANGLE(WindowPos2sARB)
 | 
			
		||||
#define glWindowPos2sMESA		MANGLE(WindowPos2sMESA)
 | 
			
		||||
#define glWindowPos2sv		MANGLE(WindowPos2sv)
 | 
			
		||||
#define glWindowPos2svARB		MANGLE(WindowPos2svARB)
 | 
			
		||||
#define glWindowPos2svMESA		MANGLE(WindowPos2svMESA)
 | 
			
		||||
#define glWindowPos3d		MANGLE(WindowPos3d)
 | 
			
		||||
#define glWindowPos3dARB		MANGLE(WindowPos3dARB)
 | 
			
		||||
#define glWindowPos3dMESA		MANGLE(WindowPos3dMESA)
 | 
			
		||||
#define glWindowPos3dv		MANGLE(WindowPos3dv)
 | 
			
		||||
#define glWindowPos3dvARB		MANGLE(WindowPos3dvARB)
 | 
			
		||||
#define glWindowPos3dvMESA		MANGLE(WindowPos3dvMESA)
 | 
			
		||||
#define glWindowPos3f		MANGLE(WindowPos3f)
 | 
			
		||||
#define glWindowPos3fARB		MANGLE(WindowPos3fARB)
 | 
			
		||||
#define glWindowPos3fMESA		MANGLE(WindowPos3fMESA)
 | 
			
		||||
#define glWindowPos3fv		MANGLE(WindowPos3fv)
 | 
			
		||||
#define glWindowPos3fvARB		MANGLE(WindowPos3fvARB)
 | 
			
		||||
#define glWindowPos3fvMESA		MANGLE(WindowPos3fvMESA)
 | 
			
		||||
#define glWindowPos3i		MANGLE(WindowPos3i)
 | 
			
		||||
#define glWindowPos3iARB		MANGLE(WindowPos3iARB)
 | 
			
		||||
#define glWindowPos3iMESA		MANGLE(WindowPos3iMESA)
 | 
			
		||||
#define glWindowPos3iv		MANGLE(WindowPos3iv)
 | 
			
		||||
#define glWindowPos3ivARB		MANGLE(WindowPos3ivARB)
 | 
			
		||||
#define glWindowPos3ivMESA		MANGLE(WindowPos3ivMESA)
 | 
			
		||||
#define glWindowPos3s		MANGLE(WindowPos3s)
 | 
			
		||||
#define glWindowPos3sARB		MANGLE(WindowPos3sARB)
 | 
			
		||||
#define glWindowPos3sMESA		MANGLE(WindowPos3sMESA)
 | 
			
		||||
#define glWindowPos3sv		MANGLE(WindowPos3sv)
 | 
			
		||||
#define glWindowPos3svARB		MANGLE(WindowPos3svARB)
 | 
			
		||||
#define glWindowPos3svMESA		MANGLE(WindowPos3svMESA)
 | 
			
		||||
#define glWindowPos4dMESA		MANGLE(WindowPos4dMESA)
 | 
			
		||||
#define glWindowPos4dvMESA		MANGLE(WindowPos4dvMESA)
 | 
			
		||||
@@ -1052,5 +1186,4 @@
 | 
			
		||||
#define glWindowPos4sMESA		MANGLE(WindowPos4sMESA)
 | 
			
		||||
#define glWindowPos4svMESA		MANGLE(WindowPos4svMESA)
 | 
			
		||||
#define glWriteMaskEXT		MANGLE(WriteMaskEXT)
 | 
			
		||||
 | 
			
		||||
#endif /* GL_MANGLE_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -260,6 +260,9 @@ extern "C" {
 | 
			
		||||
#ifndef GLX_MESA_release_buffers
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GLX_MESA_agp_offset
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GLX_MESA_set_3dfx_mode
 | 
			
		||||
#define GLX_3DFX_WINDOW_MODE_MESA          0x1
 | 
			
		||||
#define GLX_3DFX_FULLSCREEN_MODE_MESA      0x2
 | 
			
		||||
@@ -568,6 +571,14 @@ extern Bool glXSet3DfxModeMESA (int);
 | 
			
		||||
typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GLX_MESA_agp_offset
 | 
			
		||||
#define GLX_MESA_agp_offset 1
 | 
			
		||||
#ifdef GLX_GLXEXT_PROTOTYPES
 | 
			
		||||
extern GLuint glXGetAGPOffsetMESA (const GLvoid *);
 | 
			
		||||
#endif /* GLX_GLXEXT_PROTOTYPES */
 | 
			
		||||
typedef GLuint ( * PFNGLXGETAGPOFFSETMESAPROC) (const GLvoid *);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GLX_SGIX_visual_select_group
 | 
			
		||||
#define GLX_SGIX_visual_select_group 1
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: gloss.c,v 1.6 2000/12/24 22:53:54 pesco Exp $ */
 | 
			
		||||
/* $Id: gloss.c,v 1.6.6.1 2002/11/28 15:52:11 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Specular reflection demo.  The specular highlight is modulated by
 | 
			
		||||
@@ -85,9 +85,9 @@ static void Display( void )
 | 
			
		||||
   glCallList(Object);
 | 
			
		||||
 | 
			
		||||
   /* Second pass: specular lighting with reflection texture */
 | 
			
		||||
   glEnable(GL_POLYGON_OFFSET_FILL);
 | 
			
		||||
   glBlendFunc(GL_ONE, GL_ONE);  /* add */
 | 
			
		||||
   glEnable(GL_BLEND);
 | 
			
		||||
   glDepthFunc(GL_LEQUAL);
 | 
			
		||||
   glMaterialfv(GL_FRONT, GL_DIFFUSE, Black);
 | 
			
		||||
   glMaterialfv(GL_FRONT, GL_SPECULAR, White);
 | 
			
		||||
   if (DoSpecTexture) {
 | 
			
		||||
@@ -102,6 +102,7 @@ static void Display( void )
 | 
			
		||||
   glDisable(GL_TEXTURE_GEN_S);
 | 
			
		||||
   glDisable(GL_TEXTURE_GEN_T);
 | 
			
		||||
   glDisable(GL_BLEND);
 | 
			
		||||
   glDisable(GL_POLYGON_OFFSET_FILL);
 | 
			
		||||
 | 
			
		||||
   glPopMatrix();
 | 
			
		||||
 | 
			
		||||
@@ -341,6 +342,8 @@ static void Init( int argc, char *argv[] )
 | 
			
		||||
   glEnable(GL_DEPTH_TEST);
 | 
			
		||||
   glEnable(GL_NORMALIZE);
 | 
			
		||||
 | 
			
		||||
   glPolygonOffset( -1, -1 );
 | 
			
		||||
 | 
			
		||||
   if (argc > 1 && strcmp(argv[1], "-info")==0) {
 | 
			
		||||
      printf("GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
 | 
			
		||||
      printf("GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: osdemo.c,v 1.9 2002/07/12 15:54:19 brianp Exp $ */
 | 
			
		||||
/* $Id: osdemo.c,v 1.9.4.1 2003/03/03 03:14:55 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Demo of off-screen Mesa rendering
 | 
			
		||||
@@ -139,6 +139,11 @@ static void render_image( void )
 | 
			
		||||
 | 
			
		||||
   glPopMatrix();
 | 
			
		||||
 | 
			
		||||
   /* This is very important!!!
 | 
			
		||||
    * Make sure buffered commands are finished!!!
 | 
			
		||||
    */
 | 
			
		||||
   glFinish();
 | 
			
		||||
 | 
			
		||||
   Frames++;
 | 
			
		||||
   if (perf) {
 | 
			
		||||
     GLint t = glutGet(GLUT_ELAPSED_TIME);
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif
 | 
			
		||||
#define GL_GLEXT_LEGACY
 | 
			
		||||
#define GL_GLEXT_PROTOTYPES
 | 
			
		||||
#include <GL/glut.h>
 | 
			
		||||
 | 
			
		||||
/* Some <math.h> files do not define M_PI... */
 | 
			
		||||
@@ -264,15 +264,15 @@ menu(int option)
 | 
			
		||||
  case 0:
 | 
			
		||||
    makePointList();
 | 
			
		||||
    break;
 | 
			
		||||
#if GL_EXT_point_parameters
 | 
			
		||||
#if GL_ARB_point_parameters
 | 
			
		||||
  case 1:
 | 
			
		||||
    glPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, constant);
 | 
			
		||||
    glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, constant);
 | 
			
		||||
    break;
 | 
			
		||||
  case 2:
 | 
			
		||||
    glPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, linear);
 | 
			
		||||
    glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, linear);
 | 
			
		||||
    break;
 | 
			
		||||
  case 3:
 | 
			
		||||
    glPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, theQuad);
 | 
			
		||||
    glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad);
 | 
			
		||||
    break;
 | 
			
		||||
#endif
 | 
			
		||||
  case 4:
 | 
			
		||||
@@ -281,12 +281,12 @@ menu(int option)
 | 
			
		||||
  case 5:
 | 
			
		||||
    blend = 0;
 | 
			
		||||
    break;
 | 
			
		||||
#if GL_EXT_point_parameters
 | 
			
		||||
#if GL_ARB_point_parameters
 | 
			
		||||
  case 6:
 | 
			
		||||
    glPointParameterfEXT(GL_POINT_FADE_THRESHOLD_SIZE_EXT, 1.0);
 | 
			
		||||
    glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 1.0);
 | 
			
		||||
    break;
 | 
			
		||||
  case 7:
 | 
			
		||||
    glPointParameterfEXT(GL_POINT_FADE_THRESHOLD_SIZE_EXT, 10.0);
 | 
			
		||||
    glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 10.0);
 | 
			
		||||
    break;
 | 
			
		||||
#endif
 | 
			
		||||
  case 8:
 | 
			
		||||
@@ -468,8 +468,8 @@ main(int argc, char **argv)
 | 
			
		||||
  glEnable(GL_POINT_SMOOTH);
 | 
			
		||||
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 | 
			
		||||
  glPointSize(8.0);
 | 
			
		||||
#if GL_EXT_point_parameters
 | 
			
		||||
  glPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, theQuad);
 | 
			
		||||
#if GL_ARB_point_parameters
 | 
			
		||||
  glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad);
 | 
			
		||||
#endif
 | 
			
		||||
  glMatrixMode(GL_PROJECTION);
 | 
			
		||||
  gluPerspective( /* field of view in degree */ 40.0,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: winpos.c,v 1.5 2002/04/22 16:03:37 brianp Exp $ */
 | 
			
		||||
/* $Id: winpos.c,v 1.5.4.2 2003/02/28 18:03:45 kschultz Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Example of how to use the GL_MESA_window_pos extension.
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif
 | 
			
		||||
#define GL_GLEXT_LEGACY
 | 
			
		||||
#define GL_GLEXT_PROTOTYPES
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
 | 
			
		||||
#include "readtex.c"  /* a hack, I know */
 | 
			
		||||
@@ -30,18 +30,13 @@ static GLubyte *Image;
 | 
			
		||||
static int ImgWidth, ImgHeight;
 | 
			
		||||
static GLenum ImgFormat;
 | 
			
		||||
 | 
			
		||||
typedef void (APIENTRY * PFNWINDOWPOSFUNC)(GLfloat x, GLfloat y);
 | 
			
		||||
static PFNWINDOWPOSFUNC WindowPosFunc;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void draw( void )
 | 
			
		||||
{
 | 
			
		||||
   GLfloat angle;
 | 
			
		||||
   char *extensions;
 | 
			
		||||
 | 
			
		||||
   extensions = (char *) glGetString( GL_EXTENSIONS );
 | 
			
		||||
   if (strstr( extensions, "GL_MESA_window_pos")==NULL) {
 | 
			
		||||
      printf("Sorry, GL_MESA_window_pos extension not available.\n");
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   glClear( GL_COLOR_BUFFER_BIT );
 | 
			
		||||
 | 
			
		||||
@@ -50,16 +45,14 @@ static void draw( void )
 | 
			
		||||
      GLfloat y = 50.0 + 200.0 * sin( angle * M_PI / 180.0 );
 | 
			
		||||
 | 
			
		||||
      /* Don't need to worry about the modelview or projection matrices!!! */
 | 
			
		||||
#ifdef GL_MESA_window_pos
 | 
			
		||||
      glWindowPos2fMESA( x, y );
 | 
			
		||||
#endif
 | 
			
		||||
      (*WindowPosFunc)( x, y );
 | 
			
		||||
 | 
			
		||||
      glDrawPixels( ImgWidth, ImgHeight, ImgFormat, GL_UNSIGNED_BYTE, Image );
 | 
			
		||||
   }
 | 
			
		||||
   glFinish();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void key( unsigned char key, int x, int y )
 | 
			
		||||
{
 | 
			
		||||
   (void) x;
 | 
			
		||||
@@ -71,7 +64,6 @@ static void key( unsigned char key, int x, int y )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* new window size or exposure */
 | 
			
		||||
static void reshape( int width, int height )
 | 
			
		||||
{
 | 
			
		||||
@@ -81,6 +73,24 @@ static void reshape( int width, int height )
 | 
			
		||||
 | 
			
		||||
static void init( void )
 | 
			
		||||
{
 | 
			
		||||
#ifdef GL_ARB_window_pos
 | 
			
		||||
   if (glutExtensionSupported("GL_ARB_window_pos")) {
 | 
			
		||||
      printf("Using GL_ARB_window_pos\n");
 | 
			
		||||
      WindowPosFunc = &glWindowPos2fARB;
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
#elif defined(GL_ARB_window_pos)
 | 
			
		||||
   if (glutExtensionSupported("GL_MESA_window_pos")) {
 | 
			
		||||
      printf("Using GL_MESA_window_pos\n");
 | 
			
		||||
      WindowPosFunc = &glWindowPos2fMESA;
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
#endif
 | 
			
		||||
   {
 | 
			
		||||
      printf("Sorry, GL_ARB/MESA_window_pos extension not available.\n");
 | 
			
		||||
      exit(1);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   Image = LoadRGBImage( IMAGE_FILE, &ImgWidth, &ImgHeight, &ImgFormat );
 | 
			
		||||
   if (!Image) {
 | 
			
		||||
      printf("Couldn't read %s\n", IMAGE_FILE);
 | 
			
		||||
@@ -90,7 +100,6 @@ static void init( void )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main( int argc, char *argv[] )
 | 
			
		||||
{
 | 
			
		||||
   glutInitWindowPosition(0, 0);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,36 +1,86 @@
 | 
			
		||||
# $Id: Makefile.DJ,v 1.1 1999/08/19 00:55:41 jtg Exp $
 | 
			
		||||
 | 
			
		||||
# Makefile for sample programs for MS-DOS with DJGPP
 | 
			
		||||
 | 
			
		||||
##### MACROS #####
 | 
			
		||||
 | 
			
		||||
INCDIR = ../include
 | 
			
		||||
 | 
			
		||||
GL_LIBS =  ../lib/dosglut.a ../lib/dosglub.a ../lib/dosmesa.a
 | 
			
		||||
 | 
			
		||||
LIB_DEP = $(GL_LIBS)
 | 
			
		||||
 | 
			
		||||
PROGS = accum bitmap1 bitmap2 blendeq blendxor copy depth \
 | 
			
		||||
	eval fog font line logo nurb olympic \
 | 
			
		||||
	point prim quad select shape \
 | 
			
		||||
	sphere star stencil stretch texture \
 | 
			
		||||
	tri wave
 | 
			
		||||
 | 
			
		||||
##### RULES #####
 | 
			
		||||
 | 
			
		||||
.c: $(LIB_DEP)
 | 
			
		||||
	gcc -I$(INCDIR) $(CFLAGS) $< $(LIB_DEP) -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##### TARGETS #####
 | 
			
		||||
 | 
			
		||||
default: $(PROGS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	del *. 
 | 
			
		||||
 | 
			
		||||
realclean: clean
 | 
			
		||||
	del *.exe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  4.0
 | 
			
		||||
# 
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
# DOS/DJGPP samples makefile v1.3 for Mesa
 | 
			
		||||
#
 | 
			
		||||
#  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
#  Email : dborca@yahoo.com
 | 
			
		||||
#  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
#  Available options:
 | 
			
		||||
#
 | 
			
		||||
#    Environment variables:
 | 
			
		||||
#	CPU		optimize for the given processor.
 | 
			
		||||
#			default = k6
 | 
			
		||||
#	GLIDE		path to Glide3 SDK library files; used with FX.
 | 
			
		||||
#			default = $(TOP)/lib/glide3
 | 
			
		||||
#	FX=1		build for 3dfx Glide3. Note that this disables
 | 
			
		||||
#			compilation of most DMesa code and requires fxMesa.
 | 
			
		||||
#			As a consequence, you'll need the DJGPP Glide3
 | 
			
		||||
#			library to build any application.
 | 
			
		||||
#			default = no
 | 
			
		||||
#	DXE=1		use DXE modules. The resolution object file must be
 | 
			
		||||
#			present in the `lib' directory in order to use this
 | 
			
		||||
#			option (see README.DJ for details).
 | 
			
		||||
#			default = no
 | 
			
		||||
#
 | 
			
		||||
#    Targets:
 | 
			
		||||
#	<file.exe>	build a specific file
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY : all
 | 
			
		||||
.SUFFIXES : .c .o .exe
 | 
			
		||||
 | 
			
		||||
TOP = ..
 | 
			
		||||
CPU ?= k6
 | 
			
		||||
GLIDE ?= $(TOP)/lib/glide3
 | 
			
		||||
 | 
			
		||||
CC = gcc
 | 
			
		||||
CFLAGS = -Wall -W -pedantic
 | 
			
		||||
CFLAGS += -O2 -ffast-math -mcpu=$(CPU)
 | 
			
		||||
CFLAGS += -I$(TOP)/include
 | 
			
		||||
 | 
			
		||||
LD = gxx
 | 
			
		||||
LDFLAGS = -s -L$(TOP)/lib
 | 
			
		||||
 | 
			
		||||
ifeq ($(DXE),1)
 | 
			
		||||
DXE3TABLE = $(TOP)/lib/dxe3tbl.o
 | 
			
		||||
LDLIBS += -liglut -liglu -ligl -ldl
 | 
			
		||||
else
 | 
			
		||||
LDLIBS = -lglut -lglu -lgl
 | 
			
		||||
ifeq ($(FX),1)
 | 
			
		||||
LDFLAGS += -L$(GLIDE)
 | 
			
		||||
LDLIBS += -lglid3
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) -o $@ $(CFLAGS) -c $<
 | 
			
		||||
.o.exe:
 | 
			
		||||
	$(LD) -o $@ $(LDFLAGS) $(DXE3TABLE) $< $(LDLIBS)
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	$(error Must specify <filename.exe> to build)
 | 
			
		||||
 
 | 
			
		||||
@@ -256,18 +256,30 @@ int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int width, height;
 | 
			
		||||
	GLubyte *data;
 | 
			
		||||
        char buff[32];
 | 
			
		||||
        int n;
 | 
			
		||||
        FILE *fo;
 | 
			
		||||
 | 
			
		||||
	if (argc != 2)
 | 
			
		||||
	if (argc != 3)
 | 
			
		||||
	{
 | 
			
		||||
		fprintf(stderr, "usage: %s <filename>\n", argv[0]);
 | 
			
		||||
		fprintf(stderr, "usage: %s <infile.rgb> <outfile.p6>\n", argv[0]);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	data = read_rgb_texture(argv[1], &width, &height);
 | 
			
		||||
 | 
			
		||||
	printf("P6\n%d %d\n255\n", width, height);
 | 
			
		||||
	fwrite(data, width * 3, height, stdout);
 | 
			
		||||
	n = sprintf(buff, "P6\n%d %d\n255\n", width, height);
 | 
			
		||||
 | 
			
		||||
        /* [dBorca] avoid LF to CRLF conversion */
 | 
			
		||||
        if ((fo = fopen(argv[2], "wb")) == NULL) {
 | 
			
		||||
           fprintf(stderr, "Cannot open output file!\n");
 | 
			
		||||
           exit(1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	fwrite(buff, n, 1, fo);
 | 
			
		||||
	fwrite(data, width * 3, height, fo);
 | 
			
		||||
 | 
			
		||||
        fclose(fo);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cva.c,v 1.4 2002/01/16 01:03:25 kschultz Exp $ */
 | 
			
		||||
/* $Id: cva.c,v 1.4.4.1 2003/01/28 15:31:49 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Trivial CVA test, good for testing driver fastpaths (especially
 | 
			
		||||
@@ -133,7 +133,9 @@ int main( int argc, char **argv )
 | 
			
		||||
    */
 | 
			
		||||
   string = (char *) glGetString( GL_VERSION );
 | 
			
		||||
 | 
			
		||||
   if ( (!strstr( string, "1.2" ))&&(!strstr(string,"1.3"))) {
 | 
			
		||||
   if ( !strstr(string, "1.2") &&
 | 
			
		||||
        !strstr(string, "1.3") &&
 | 
			
		||||
        !strstr(string, "1.4")) {
 | 
			
		||||
      fprintf( stderr, "This program requires OpenGL 1.2 vertex arrays.\n" );
 | 
			
		||||
      exit( -1 );
 | 
			
		||||
   }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: texwrap.c,v 1.4 2002/10/18 17:47:36 kschultz Exp $ */
 | 
			
		||||
/* $Id: texwrap.c,v 1.4.2.1 2003/02/04 02:34:42 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Test texture wrap modes.
 | 
			
		||||
@@ -119,7 +119,7 @@ static void Display( void )
 | 
			
		||||
#if 0
 | 
			
		||||
   /* draw texture as image */
 | 
			
		||||
   glDisable(GL_TEXTURE_2D);
 | 
			
		||||
   glWindowPos2iMESA(1, 1);
 | 
			
		||||
   glWindowPos2iARB(1, 1);
 | 
			
		||||
   glDrawPixels(6, 6, GL_RGBA, GL_UNSIGNED_BYTE, (void *) TexImage);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -183,7 +183,7 @@ static void Display( void )
 | 
			
		||||
   offset = 0;
 | 
			
		||||
   for (i = 0; i < modes[i].mode != 0; i++) {
 | 
			
		||||
      if ( modes[i].supported ) {
 | 
			
		||||
         glWindowPos2iMESA( offset * 150 + 10, 5 + ((offset & 1) * 15) );
 | 
			
		||||
         glWindowPos2iARB( offset * 150 + 10, 5 + ((offset & 1) * 15) );
 | 
			
		||||
	 PrintString(modes[i].name);
 | 
			
		||||
	 offset++;
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
# DOS/DJGPP glu makefile v1.1 for Mesa 4.0
 | 
			
		||||
# DOS/DJGPP glu makefile v1.3 for Mesa
 | 
			
		||||
#
 | 
			
		||||
#  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
#  Email : dborca@yahoo.com
 | 
			
		||||
@@ -52,14 +52,16 @@ CC = gcc
 | 
			
		||||
CFLAGS += -I$(TOP)/include
 | 
			
		||||
 | 
			
		||||
AR = ar
 | 
			
		||||
ARFLAGS = ru
 | 
			
		||||
ARFLAGS = rus
 | 
			
		||||
 | 
			
		||||
ifneq ($(wildcard $(DJDIR)/lib/dxe2.ld),)
 | 
			
		||||
DXE2GEN = $(wildcard $(addsuffix /dxe2gen.exe,$(subst ;, ,$(PATH))))
 | 
			
		||||
HAVEDXE3 = $(wildcard $(DJDIR)/bin/dxe3gen.exe)
 | 
			
		||||
 | 
			
		||||
ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
 | 
			
		||||
UNLINK = del $(subst /,\,$(1))
 | 
			
		||||
else
 | 
			
		||||
UNLINK = $(RM) $(1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
RM = del
 | 
			
		||||
 | 
			
		||||
CORE_SOURCES = \
 | 
			
		||||
	glu.c \
 | 
			
		||||
	mipmap.c \
 | 
			
		||||
@@ -78,7 +80,7 @@ SOURCES = $(CORE_SOURCES)
 | 
			
		||||
OBJECTS = $(SOURCES:.c=.o)
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) -o $@ -c $(CFLAGS) $<
 | 
			
		||||
	$(CC) -o $@ $(CFLAGS) -c $<
 | 
			
		||||
 | 
			
		||||
all: $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP)
 | 
			
		||||
 | 
			
		||||
@@ -86,14 +88,13 @@ $(LIBDIR)/$(GLU_LIB): $(OBJECTS)
 | 
			
		||||
	$(AR) $(ARFLAGS) $(LIBDIR)/$(GLU_LIB) $(OBJECTS)
 | 
			
		||||
 | 
			
		||||
$(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)
 | 
			
		||||
ifeq ($(DXE2GEN),)
 | 
			
		||||
	$(warning Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN)
 | 
			
		||||
	$(warning somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.)
 | 
			
		||||
ifeq ($(HAVEDXE3),)
 | 
			
		||||
	$(warning Missing DXE3 package... Skipping $(GLU_DXE))
 | 
			
		||||
else
 | 
			
		||||
	-dxe2gen -o $(LIBDIR)/$(GLU_DXE) -I $(LIBDIR)/$(GLU_IMP) $(OBJECTS) -E djgpp_ -E glu -D "Mesa DJGPP GLU" -U
 | 
			
		||||
	-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -I $(LIBDIR)/$(GLU_IMP) -D "MesaGLU DJGPP" -E _glu -P gl.dxe -U $(OBJECTS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	-$(RM) $(subst /,\,*.o)
 | 
			
		||||
	-$(call UNLINK,*.o)
 | 
			
		||||
 | 
			
		||||
-include depend
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										188
									
								
								src/glu/sgi/Makefile.DJ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								src/glu/sgi/Makefile.DJ
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,188 @@
 | 
			
		||||
# Mesa 3-D graphics library
 | 
			
		||||
# Version:  4.0
 | 
			
		||||
# 
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
# DOS/DJGPP glu makefile v1.3 for Mesa
 | 
			
		||||
#
 | 
			
		||||
#  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
#  Email : dborca@yahoo.com
 | 
			
		||||
#  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
#  Available options:
 | 
			
		||||
#
 | 
			
		||||
#    Environment variables:
 | 
			
		||||
#	CFLAGS
 | 
			
		||||
#
 | 
			
		||||
#    Targets:
 | 
			
		||||
#	all:		build GLU
 | 
			
		||||
#	clean:		remove object files
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: all clean
 | 
			
		||||
 | 
			
		||||
TOP = ..
 | 
			
		||||
LIBDIR = $(TOP)/lib
 | 
			
		||||
GLU_LIB = libglu.a
 | 
			
		||||
GLU_DXE = glu.dxe
 | 
			
		||||
GLU_IMP = libiglu.a
 | 
			
		||||
 | 
			
		||||
CC = gcc
 | 
			
		||||
CFLAGS += -DNDEBUG -DLIBRARYBUILD -I$(TOP)/include -Iinclude
 | 
			
		||||
CXX = gpp
 | 
			
		||||
CXXFLAGS = $(CFLAGS) -Ilibnurbs/internals -Ilibnurbs/interface -Ilibnurbs/nurbtess
 | 
			
		||||
 | 
			
		||||
AR = ar
 | 
			
		||||
ARFLAGS = rus
 | 
			
		||||
 | 
			
		||||
HAVEDXE3 = $(wildcard $(DJDIR)/bin/dxe3gen.exe)
 | 
			
		||||
 | 
			
		||||
ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
 | 
			
		||||
UNLINK = del $(subst /,\,$(1))
 | 
			
		||||
else
 | 
			
		||||
UNLINK = $(RM) $(1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
C_SOURCES = \
 | 
			
		||||
	libutil/error.c \
 | 
			
		||||
	libutil/glue.c \
 | 
			
		||||
	libutil/mipmap.c \
 | 
			
		||||
	libutil/project.c \
 | 
			
		||||
	libutil/quad.c \
 | 
			
		||||
	libutil/registry.c \
 | 
			
		||||
	libtess/dict.c \
 | 
			
		||||
	libtess/geom.c \
 | 
			
		||||
	libtess/memalloc.c \
 | 
			
		||||
	libtess/mesh.c \
 | 
			
		||||
	libtess/normal.c \
 | 
			
		||||
	libtess/priorityq.c \
 | 
			
		||||
	libtess/render.c \
 | 
			
		||||
	libtess/sweep.c \
 | 
			
		||||
	libtess/tess.c \
 | 
			
		||||
	libtess/tessmono.c
 | 
			
		||||
 | 
			
		||||
CC_SOURCES = \
 | 
			
		||||
	libnurbs/interface/bezierEval.cc \
 | 
			
		||||
	libnurbs/interface/bezierPatch.cc \
 | 
			
		||||
	libnurbs/interface/bezierPatchMesh.cc \
 | 
			
		||||
	libnurbs/interface/glcurveval.cc \
 | 
			
		||||
	libnurbs/interface/glinterface.cc \
 | 
			
		||||
	libnurbs/interface/glrenderer.cc \
 | 
			
		||||
	libnurbs/interface/glsurfeval.cc \
 | 
			
		||||
	libnurbs/interface/incurveeval.cc \
 | 
			
		||||
	libnurbs/interface/insurfeval.cc \
 | 
			
		||||
	libnurbs/internals/arc.cc \
 | 
			
		||||
	libnurbs/internals/arcsorter.cc \
 | 
			
		||||
	libnurbs/internals/arctess.cc \
 | 
			
		||||
	libnurbs/internals/backend.cc \
 | 
			
		||||
	libnurbs/internals/basiccrveval.cc \
 | 
			
		||||
	libnurbs/internals/basicsurfeval.cc \
 | 
			
		||||
	libnurbs/internals/bin.cc \
 | 
			
		||||
	libnurbs/internals/bufpool.cc \
 | 
			
		||||
	libnurbs/internals/cachingeval.cc \
 | 
			
		||||
	libnurbs/internals/ccw.cc \
 | 
			
		||||
	libnurbs/internals/coveandtiler.cc \
 | 
			
		||||
	libnurbs/internals/curve.cc \
 | 
			
		||||
	libnurbs/internals/curvelist.cc \
 | 
			
		||||
	libnurbs/internals/curvesub.cc \
 | 
			
		||||
	libnurbs/internals/dataTransform.cc \
 | 
			
		||||
	libnurbs/internals/displaylist.cc \
 | 
			
		||||
	libnurbs/internals/flist.cc \
 | 
			
		||||
	libnurbs/internals/flistsorter.cc \
 | 
			
		||||
	libnurbs/internals/hull.cc \
 | 
			
		||||
	libnurbs/internals/intersect.cc \
 | 
			
		||||
	libnurbs/internals/knotvector.cc \
 | 
			
		||||
	libnurbs/internals/mapdesc.cc \
 | 
			
		||||
	libnurbs/internals/mapdescv.cc \
 | 
			
		||||
	libnurbs/internals/maplist.cc \
 | 
			
		||||
	libnurbs/internals/mesher.cc \
 | 
			
		||||
	libnurbs/internals/monoTriangulationBackend.cc \
 | 
			
		||||
	libnurbs/internals/monotonizer.cc \
 | 
			
		||||
	libnurbs/internals/mycode.cc \
 | 
			
		||||
	libnurbs/internals/nurbsinterfac.cc \
 | 
			
		||||
	libnurbs/internals/nurbstess.cc \
 | 
			
		||||
	libnurbs/internals/patch.cc \
 | 
			
		||||
	libnurbs/internals/patchlist.cc \
 | 
			
		||||
	libnurbs/internals/quilt.cc \
 | 
			
		||||
	libnurbs/internals/reader.cc \
 | 
			
		||||
	libnurbs/internals/renderhints.cc \
 | 
			
		||||
	libnurbs/internals/slicer.cc \
 | 
			
		||||
	libnurbs/internals/sorter.cc \
 | 
			
		||||
	libnurbs/internals/splitarcs.cc \
 | 
			
		||||
	libnurbs/internals/subdivider.cc \
 | 
			
		||||
	libnurbs/internals/tobezier.cc \
 | 
			
		||||
	libnurbs/internals/trimline.cc \
 | 
			
		||||
	libnurbs/internals/trimregion.cc \
 | 
			
		||||
	libnurbs/internals/trimvertpool.cc \
 | 
			
		||||
	libnurbs/internals/uarray.cc \
 | 
			
		||||
	libnurbs/internals/varray.cc \
 | 
			
		||||
	libnurbs/nurbtess/directedLine.cc \
 | 
			
		||||
	libnurbs/nurbtess/gridWrap.cc \
 | 
			
		||||
	libnurbs/nurbtess/monoChain.cc \
 | 
			
		||||
	libnurbs/nurbtess/monoPolyPart.cc \
 | 
			
		||||
	libnurbs/nurbtess/monoTriangulation.cc \
 | 
			
		||||
	libnurbs/nurbtess/partitionX.cc \
 | 
			
		||||
	libnurbs/nurbtess/partitionY.cc \
 | 
			
		||||
	libnurbs/nurbtess/polyDBG.cc \
 | 
			
		||||
	libnurbs/nurbtess/polyUtil.cc \
 | 
			
		||||
	libnurbs/nurbtess/primitiveStream.cc \
 | 
			
		||||
	libnurbs/nurbtess/quicksort.cc \
 | 
			
		||||
	libnurbs/nurbtess/rectBlock.cc \
 | 
			
		||||
	libnurbs/nurbtess/sampleComp.cc \
 | 
			
		||||
	libnurbs/nurbtess/sampleCompBot.cc \
 | 
			
		||||
	libnurbs/nurbtess/sampleCompRight.cc \
 | 
			
		||||
	libnurbs/nurbtess/sampleCompTop.cc \
 | 
			
		||||
	libnurbs/nurbtess/sampleMonoPoly.cc \
 | 
			
		||||
	libnurbs/nurbtess/sampledLine.cc \
 | 
			
		||||
	libnurbs/nurbtess/searchTree.cc
 | 
			
		||||
 | 
			
		||||
SOURCES = $(C_SOURCES) $(CC_SOURCES)
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) -o $@ $(CFLAGS) -c $<
 | 
			
		||||
.cc.o:
 | 
			
		||||
	$(CXX) -o $@ $(CXXFLAGS) -c $<
 | 
			
		||||
 | 
			
		||||
all: $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP)
 | 
			
		||||
 | 
			
		||||
$(LIBDIR)/$(GLU_LIB): $(OBJECTS)
 | 
			
		||||
	$(AR) $(ARFLAGS) $(LIBDIR)/$(GLU_LIB) $(OBJECTS)
 | 
			
		||||
 | 
			
		||||
$(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)
 | 
			
		||||
ifeq ($(HAVEDXE3),)
 | 
			
		||||
	$(warning Missing DXE3 package... Skipping $(GLU_DXE))
 | 
			
		||||
else
 | 
			
		||||
	-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -I $(LIBDIR)/$(GLU_IMP) -D "MesaGLU/SGI DJGPP" -E _glu -P gl.dxe -U $(OBJECTS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	-$(call UNLINK,libutil/*.o)
 | 
			
		||||
	-$(call UNLINK,libtess/*.o)
 | 
			
		||||
	-$(call UNLINK,libnurbs/interface/*.o)
 | 
			
		||||
	-$(call UNLINK,libnurbs/internals/*.o)
 | 
			
		||||
	-$(call UNLINK,libnurbs/nurbtess/*.o)
 | 
			
		||||
 | 
			
		||||
-include depend
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
** gluos.h - operating system dependencies for GLU
 | 
			
		||||
**
 | 
			
		||||
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/include/gluos.h,v 1.4 2002/10/04 15:58:33 kschultz Exp $
 | 
			
		||||
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/include/gluos.h,v 1.4.4.1 2003/02/12 16:04:45 brianp Exp $
 | 
			
		||||
*/
 | 
			
		||||
#ifdef __VMS
 | 
			
		||||
#ifdef __cplusplus 
 | 
			
		||||
@@ -37,6 +37,13 @@
 | 
			
		||||
#pragma comment(linker, "/OPT:NOWIN98")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#elif defined(__OS2__)
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <malloc.h>
 | 
			
		||||
#define WINGDIAPI
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
/* Disable Microsoft-specific keywords */
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
# DOS/DJGPP glut makefile v1.1 for Mesa 4.0
 | 
			
		||||
# DOS/DJGPP glut makefile v1.3 for Mesa
 | 
			
		||||
#
 | 
			
		||||
#  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
#  Email : dborca@yahoo.com
 | 
			
		||||
@@ -33,14 +33,7 @@
 | 
			
		||||
#    Environment variables:
 | 
			
		||||
#	CFLAGS
 | 
			
		||||
#
 | 
			
		||||
#	GLIDE		absolute path to Glide SDK; used with FX.
 | 
			
		||||
#			default = $(TOP)/include/glide3
 | 
			
		||||
#	FX=1		build for 3dfx Glide3; use it if you have the glide
 | 
			
		||||
#			SDK (designed for your platform), and, of course, a
 | 
			
		||||
#			3dfx card... Note that this disables compilation of
 | 
			
		||||
#			actual DMesa code, as Glide does all the stuff!
 | 
			
		||||
#			default = no
 | 
			
		||||
#	MARK		absolute path to original GLUT.
 | 
			
		||||
#	MKGLUT		absolute path to original GLUT.
 | 
			
		||||
#			default = $(TOP)/src-glut
 | 
			
		||||
#
 | 
			
		||||
#    Targets:
 | 
			
		||||
@@ -54,38 +47,35 @@
 | 
			
		||||
 | 
			
		||||
TOP = ..
 | 
			
		||||
GLIDE ?= $(TOP)/include/glide3
 | 
			
		||||
MARK ?= $(TOP)/src-glut
 | 
			
		||||
MKGLUT ?= $(TOP)/src-glut
 | 
			
		||||
LIBDIR = $(TOP)/lib
 | 
			
		||||
GLUT_LIB = libglut.a
 | 
			
		||||
GLUT_DXE = glut.dxe
 | 
			
		||||
GLUT_IMP = libiglut.a
 | 
			
		||||
 | 
			
		||||
CC = gcc
 | 
			
		||||
CFLAGS += -I$(TOP)/include -I$(MARK)
 | 
			
		||||
ifdef FX
 | 
			
		||||
CFLAGS += -D__DOS__ -I$(GLIDE) -DFX -DFX_GLIDE3 -DFXMESA_USE_ARGB
 | 
			
		||||
endif
 | 
			
		||||
CFLAGS += -I- -I$(TOP)/include -I. -I$(MKGLUT) -IPC_HW
 | 
			
		||||
 | 
			
		||||
AR = ar
 | 
			
		||||
ARFLAGS = ru
 | 
			
		||||
ARFLAGS = rus
 | 
			
		||||
 | 
			
		||||
ifneq ($(wildcard $(DJDIR)/lib/dxe2.ld),)
 | 
			
		||||
DXE2GEN = $(wildcard $(addsuffix /dxe2gen.exe,$(subst ;, ,$(PATH))))
 | 
			
		||||
HAVEDXE3 = $(wildcard $(DJDIR)/bin/dxe3gen.exe)
 | 
			
		||||
 | 
			
		||||
ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
 | 
			
		||||
UNLINK = del $(subst /,\,$(1))
 | 
			
		||||
else
 | 
			
		||||
UNLINK = $(RM) $(1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
RM = del
 | 
			
		||||
 | 
			
		||||
CORE_SOURCES = \
 | 
			
		||||
	bitmap.c \
 | 
			
		||||
	callback.c \
 | 
			
		||||
	color.c \
 | 
			
		||||
	globals.c \
 | 
			
		||||
	extens.c \
 | 
			
		||||
	init.c \
 | 
			
		||||
	menu.c \
 | 
			
		||||
	models.c \
 | 
			
		||||
	mouse.c \
 | 
			
		||||
	overlay.c \
 | 
			
		||||
	state.c \
 | 
			
		||||
	teapot.c \
 | 
			
		||||
	window.c
 | 
			
		||||
 | 
			
		||||
PC_HW_SOURCES = \
 | 
			
		||||
@@ -95,25 +85,34 @@ PC_HW_SOURCES = \
 | 
			
		||||
	PC_HW/pc_timer.c \
 | 
			
		||||
	PC_HW/pc_irq.S
 | 
			
		||||
 | 
			
		||||
MARK_SOURCES = \
 | 
			
		||||
	$(MARK)/glut_8x13.c \
 | 
			
		||||
	$(MARK)/glut_9x15.c \
 | 
			
		||||
	$(MARK)/glut_hel10.c \
 | 
			
		||||
	$(MARK)/glut_hel12.c \
 | 
			
		||||
	$(MARK)/glut_hel18.c \
 | 
			
		||||
	$(MARK)/glut_tr10.c \
 | 
			
		||||
	$(MARK)/glut_tr24.c
 | 
			
		||||
MKGLUT_SOURCES = \
 | 
			
		||||
	$(MKGLUT)/glut_bitmap.c \
 | 
			
		||||
	$(MKGLUT)/glut_bwidth.c \
 | 
			
		||||
	$(MKGLUT)/glut_stroke.c \
 | 
			
		||||
	$(MKGLUT)/glut_swidth.c \
 | 
			
		||||
	$(MKGLUT)/glut_shapes.c \
 | 
			
		||||
	$(MKGLUT)/glut_teapot.c \
 | 
			
		||||
	$(MKGLUT)/glut_8x13.c \
 | 
			
		||||
	$(MKGLUT)/glut_9x15.c \
 | 
			
		||||
	$(MKGLUT)/glut_hel10.c \
 | 
			
		||||
	$(MKGLUT)/glut_hel12.c \
 | 
			
		||||
	$(MKGLUT)/glut_hel18.c \
 | 
			
		||||
	$(MKGLUT)/glut_tr10.c \
 | 
			
		||||
	$(MKGLUT)/glut_tr24.c \
 | 
			
		||||
	$(MKGLUT)/glut_roman.c \
 | 
			
		||||
	$(MKGLUT)/glut_mroman.c \
 | 
			
		||||
	$(MKGLUT)/glut_util.c
 | 
			
		||||
 | 
			
		||||
SOURCES = $(CORE_SOURCES) $(PC_HW_SOURCES) $(MARK_SOURCES)
 | 
			
		||||
SOURCES = $(CORE_SOURCES) $(PC_HW_SOURCES) $(MKGLUT_SOURCES)
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) -o $@ -c $(CFLAGS) $<
 | 
			
		||||
	$(CC) -o $@ $(CFLAGS) -c $<
 | 
			
		||||
.S.o:
 | 
			
		||||
	$(CC) -o $@ -c $(CFLAGS) $<
 | 
			
		||||
	$(CC) -o $@ $(CFLAGS) -c $<
 | 
			
		||||
.s.o:
 | 
			
		||||
	$(CC) -o $@ -c $(CFLAGS) -x assembler-with-cpp $<
 | 
			
		||||
	$(CC) -o $@ $(CFLAGS) -x assembler-with-cpp -c $<
 | 
			
		||||
 | 
			
		||||
all: $(LIBDIR)/$(GLUT_LIB) $(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP)
 | 
			
		||||
 | 
			
		||||
@@ -121,16 +120,15 @@ $(LIBDIR)/$(GLUT_LIB): $(OBJECTS)
 | 
			
		||||
	$(AR) $(ARFLAGS) $(LIBDIR)/$(GLUT_LIB) $(OBJECTS)
 | 
			
		||||
 | 
			
		||||
$(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP): $(OBJECTS)
 | 
			
		||||
ifeq ($(DXE2GEN),)
 | 
			
		||||
	$(warning Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN)
 | 
			
		||||
	$(warning somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.)
 | 
			
		||||
ifeq ($(HAVEDXE3),)
 | 
			
		||||
	$(warning Missing DXE3 package... Skipping $(GLUT_DXE))
 | 
			
		||||
else
 | 
			
		||||
	-dxe2gen -o $(LIBDIR)/$(GLUT_DXE) -I $(LIBDIR)/$(GLUT_IMP) $(OBJECTS) -E djgpp_ -E glut -D "Mesa DJGPP GLUT" -U
 | 
			
		||||
	-dxe3gen -o $(LIBDIR)/$(GLUT_DXE) -I $(LIBDIR)/$(GLUT_IMP) -D "MesaGLUT DJGPP" -E _glut -P gl.dxe -P glu.dxe -U $(OBJECTS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	-$(RM) $(subst /,\,*.o)
 | 
			
		||||
	-$(RM) $(subst /,\,PC_HW/*.o)
 | 
			
		||||
	-$(RM) $(subst /,\,$(MARK)/*.o)
 | 
			
		||||
	-$(call UNLINK,*.o)
 | 
			
		||||
	-$(call UNLINK,PC_HW/*.o)
 | 
			
		||||
	-$(call UNLINK,$(MKGLUT)/*.o)
 | 
			
		||||
 | 
			
		||||
-include depend
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PC/HW routine collection v1.2 for DOS/DJGPP
 | 
			
		||||
 * PC/HW routine collection v1.3 for DOS/DJGPP
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -73,21 +73,22 @@ void *pc_malloc (size_t size)
 | 
			
		||||
/*
 | 
			
		||||
 * standard redirection
 | 
			
		||||
 */
 | 
			
		||||
static int h_out, h_outbak, h_err, h_errbak;
 | 
			
		||||
static char outname[L_tmpnam];
 | 
			
		||||
static int h_out, h_outbak;
 | 
			
		||||
static char errname[L_tmpnam];
 | 
			
		||||
static int h_err, h_errbak;
 | 
			
		||||
 | 
			
		||||
int pc_open_stdout (void)
 | 
			
		||||
{
 | 
			
		||||
 if ((h_out=open(tmpnam(NULL), O_WRONLY | O_CREAT | O_TRUNC | O_TEXT | O_TEMPORARY, S_IRUSR | S_IWUSR)) >= 0) {
 | 
			
		||||
    if ((h_outbak=dup(1)) != -1) {
 | 
			
		||||
       fflush(stdout);
 | 
			
		||||
       if (dup2(h_out, 1) != -1) {
 | 
			
		||||
          return 0;
 | 
			
		||||
       }
 | 
			
		||||
       close(h_outbak);
 | 
			
		||||
    }
 | 
			
		||||
    close(h_out);
 | 
			
		||||
 tmpnam(outname);
 | 
			
		||||
 | 
			
		||||
 if ((h_out=open(outname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
 | 
			
		||||
    h_outbak = dup(STDOUT_FILENO);
 | 
			
		||||
    fflush(stdout);
 | 
			
		||||
    dup2(h_out, STDOUT_FILENO);
 | 
			
		||||
 }
 | 
			
		||||
 return (h_out = -1);
 | 
			
		||||
 | 
			
		||||
 return h_out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pc_close_stdout (void)
 | 
			
		||||
@@ -95,35 +96,32 @@ void pc_close_stdout (void)
 | 
			
		||||
 FILE *f;
 | 
			
		||||
 char *line = alloca(512);
 | 
			
		||||
 | 
			
		||||
 if (h_out >= 0) {
 | 
			
		||||
    dup2(h_outbak, 1);
 | 
			
		||||
 if (h_out > 0) {
 | 
			
		||||
    dup2(h_outbak, STDOUT_FILENO);
 | 
			
		||||
    close(h_out);
 | 
			
		||||
    close(h_outbak);
 | 
			
		||||
 | 
			
		||||
    if ((f=fdopen(h_out, "r")) != NULL) {
 | 
			
		||||
       fseek(f, 0, SEEK_SET);
 | 
			
		||||
       while (fgets(line, 512, f)) {
 | 
			
		||||
             fputs(line, stdout);
 | 
			
		||||
       }
 | 
			
		||||
       fclose(f);
 | 
			
		||||
    } else {
 | 
			
		||||
       close(h_out);
 | 
			
		||||
    f = fopen(outname, "rt");
 | 
			
		||||
    while (fgets(line, 512, f)) {
 | 
			
		||||
          fputs(line, stdout);
 | 
			
		||||
    }
 | 
			
		||||
    fclose(f);
 | 
			
		||||
 | 
			
		||||
    remove(outname);
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pc_open_stderr (void)
 | 
			
		||||
{
 | 
			
		||||
 if ((h_err=open(tmpnam(NULL), O_WRONLY | O_CREAT | O_TRUNC | O_TEXT | O_TEMPORARY, S_IRUSR | S_IWUSR)) >= 0) {
 | 
			
		||||
    if ((h_errbak=dup(2)) != -1) {
 | 
			
		||||
       fflush(stderr);
 | 
			
		||||
       if (dup2(h_err, 2) != -1) {
 | 
			
		||||
          return 0;
 | 
			
		||||
       }
 | 
			
		||||
       close(h_errbak);
 | 
			
		||||
    }
 | 
			
		||||
    close(h_err);
 | 
			
		||||
 tmpnam(errname);
 | 
			
		||||
 | 
			
		||||
 if ((h_err=open(errname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
 | 
			
		||||
    h_errbak = dup(STDERR_FILENO);
 | 
			
		||||
    fflush(stderr);
 | 
			
		||||
    dup2(h_err, STDERR_FILENO);
 | 
			
		||||
 }
 | 
			
		||||
 return (h_err = -1);
 | 
			
		||||
 | 
			
		||||
 return h_err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pc_close_stderr (void)
 | 
			
		||||
@@ -131,18 +129,17 @@ void pc_close_stderr (void)
 | 
			
		||||
 FILE *f;
 | 
			
		||||
 char *line = alloca(512);
 | 
			
		||||
 | 
			
		||||
 if (h_err >= 0) {
 | 
			
		||||
    dup2(h_errbak, 2);
 | 
			
		||||
 if (h_err > 0) {
 | 
			
		||||
    dup2(h_errbak, STDERR_FILENO);
 | 
			
		||||
    close(h_err);
 | 
			
		||||
    close(h_errbak);
 | 
			
		||||
 | 
			
		||||
    if ((f=fdopen(h_err, "r")) != NULL) {
 | 
			
		||||
       fseek(f, 0, SEEK_SET);
 | 
			
		||||
       while (fgets(line, 512, f)) {
 | 
			
		||||
             fputs(line, stderr);
 | 
			
		||||
       }
 | 
			
		||||
       fclose(f);
 | 
			
		||||
    } else {
 | 
			
		||||
       close(h_err);
 | 
			
		||||
    f = fopen(errname, "rt");
 | 
			
		||||
    while (fgets(line, 512, f)) {
 | 
			
		||||
          fputs(line, stderr);
 | 
			
		||||
    }
 | 
			
		||||
    fclose(f);
 | 
			
		||||
 | 
			
		||||
    remove(errname);
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PC/HW routine collection v1.2 for DOS/DJGPP
 | 
			
		||||
 * PC/HW routine collection v1.3 for DOS/DJGPP
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
 | 
			
		||||
typedef void (*VFUNC) (void);
 | 
			
		||||
typedef void (*PFUNC) (void *);
 | 
			
		||||
typedef void (*MFUNC) (int x, int y, int b);
 | 
			
		||||
typedef void (*MFUNC) (int x, int y, int z, int b);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * atexit
 | 
			
		||||
@@ -39,6 +39,7 @@ int pc_clexit (VFUNC f);
 | 
			
		||||
#define ENDOFUNC(x)    static void x##_end() { }
 | 
			
		||||
#define LOCKFUNC(x)    _go32_dpmi_lock_code((void *)x, (long)x##_end - (long)x)
 | 
			
		||||
#define LOCKDATA(x)    _go32_dpmi_lock_data((void *)&x, sizeof(x))
 | 
			
		||||
#define LOCKBUFF(x, l) _go32_dpmi_lock_data((void *)x, l)
 | 
			
		||||
 | 
			
		||||
void *pc_malloc (size_t size);
 | 
			
		||||
 | 
			
		||||
@@ -194,6 +195,7 @@ void pc_remove_keyb (void);
 | 
			
		||||
int pc_keypressed (void);
 | 
			
		||||
int pc_readkey (void);
 | 
			
		||||
int pc_keydown (int code);
 | 
			
		||||
int pc_keyshifts (void);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * timer
 | 
			
		||||
@@ -209,10 +211,8 @@ void pc_remove_mouse (void);
 | 
			
		||||
MFUNC pc_install_mouse_handler (MFUNC handler);
 | 
			
		||||
void pc_mouse_area (int x1, int y1, int x2, int y2);
 | 
			
		||||
void pc_mouse_speed (int xspeed, int yspeed);
 | 
			
		||||
int pc_query_mouse (int *x, int *y);
 | 
			
		||||
void pc_show_mouse (void);
 | 
			
		||||
void pc_scare_mouse (void);
 | 
			
		||||
void pc_unscare_mouse (void);
 | 
			
		||||
int pc_query_mouse (int *x, int *y, int *z);
 | 
			
		||||
void pc_warp_mouse (int x, int y);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * standard redirection
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PC/HW routine collection v1.0 for DOS/DJGPP
 | 
			
		||||
 * PC/HW routine collection v1.3 for DOS/DJGPP
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -74,6 +74,9 @@ _pc_install_irq:
 | 
			
		||||
		addl	%edx, %eax
 | 
			
		||||
		movl	%eax, IRQ_STACK(%edi)
 | 
			
		||||
 | 
			
		||||
		movl	___djgpp_ds_alias, %eax
 | 
			
		||||
		movl	%eax, IRQ_STACK+4(%edi)
 | 
			
		||||
 | 
			
		||||
		movl	%ss:12(%ebp), %eax
 | 
			
		||||
		movl	%eax, IRQ_HOOK(%edi)
 | 
			
		||||
 | 
			
		||||
@@ -131,8 +134,7 @@ __irq_wrapper_##x:							   ; \
 | 
			
		||||
		pushl	%gs						   ; \
 | 
			
		||||
		movl	%ss, %ebx					   ; \
 | 
			
		||||
		movl	%esp, %esi					   ; \
 | 
			
		||||
		movl	%cs:___djgpp_ds_alias, %ss			   ; \
 | 
			
		||||
		movl	%cs:__irq_stack_##x, %esp			   ; \
 | 
			
		||||
		lss	%cs:__irq_stack_##x, %esp			   ; \
 | 
			
		||||
		pushl	%ss						   ; \
 | 
			
		||||
		pushl	%ss						   ; \
 | 
			
		||||
		popl	%es						   ; \
 | 
			
		||||
@@ -160,7 +162,7 @@ __irq_old_##x:								   ; \
 | 
			
		||||
__irq_hook_##x:								   ; \
 | 
			
		||||
		.long	0						   ; \
 | 
			
		||||
__irq_stack_##x:							   ; \
 | 
			
		||||
		.long	0
 | 
			
		||||
		.long	0, 0
 | 
			
		||||
 | 
			
		||||
		WRAPPER(0);
 | 
			
		||||
		WRAPPER(1);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PC/HW routine collection v1.1 for DOS/DJGPP
 | 
			
		||||
 * PC/HW routine collection v1.3 for DOS/DJGPP
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -357,20 +357,6 @@ static void handle_code (int scancode, int keycode)
 | 
			
		||||
 in_a_terrupt--;
 | 
			
		||||
} ENDOFUNC(handle_code)
 | 
			
		||||
 | 
			
		||||
static __inline void satisfy (void)
 | 
			
		||||
{
 | 
			
		||||
 __asm("\n\
 | 
			
		||||
		inb	$0x61, %%al	\n\
 | 
			
		||||
		movb	%%al, %%ah	\n\
 | 
			
		||||
		orb	$0x80, %%al	\n\
 | 
			
		||||
		outb	%%al, $0x61	\n\
 | 
			
		||||
		xchgb	%%al, %%ah	\n\
 | 
			
		||||
		outb	%%al, $0x61	\n\
 | 
			
		||||
		movb	$0x20, %%al	\n\
 | 
			
		||||
		outb	%%al, $0x20	\n\
 | 
			
		||||
 ":::"%eax");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int keyboard ()
 | 
			
		||||
{
 | 
			
		||||
 unsigned char temp, scancode;
 | 
			
		||||
@@ -410,7 +396,16 @@ static int keyboard ()
 | 
			
		||||
    ":::"%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 satisfy();
 | 
			
		||||
 __asm("\n\
 | 
			
		||||
		inb	$0x61, %%al	\n\
 | 
			
		||||
		movb	%%al, %%ah	\n\
 | 
			
		||||
		orb	$0x80, %%al	\n\
 | 
			
		||||
		outb	%%al, $0x61	\n\
 | 
			
		||||
		xchgb	%%al, %%ah	\n\
 | 
			
		||||
		outb	%%al, $0x61	\n\
 | 
			
		||||
		movb	$0x20, %%al	\n\
 | 
			
		||||
		outb	%%al, $0x20	\n\
 | 
			
		||||
 ":::"%eax");
 | 
			
		||||
 return 0;
 | 
			
		||||
} ENDOFUNC(keyboard)
 | 
			
		||||
 | 
			
		||||
@@ -425,8 +420,9 @@ int pc_readkey (void)
 | 
			
		||||
 if (keyboard_installed) {
 | 
			
		||||
    int key;
 | 
			
		||||
 | 
			
		||||
    do {
 | 
			
		||||
    } while (key_buffer.start==key_buffer.end);
 | 
			
		||||
    while (key_buffer.start==key_buffer.end) {
 | 
			
		||||
          __dpmi_yield();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    DISABLE();
 | 
			
		||||
    key = key_buffer.key[key_buffer.start++];
 | 
			
		||||
@@ -445,6 +441,11 @@ int pc_keydown (int code)
 | 
			
		||||
 return pc_key[code];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pc_keyshifts (void)
 | 
			
		||||
{
 | 
			
		||||
 return key_shifts;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pc_remove_keyb (void)
 | 
			
		||||
{
 | 
			
		||||
 if (keyboard_installed) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PC/HW routine collection v1.2 for DOS/DJGPP
 | 
			
		||||
 * PC/HW routine collection v1.3 for DOS/DJGPP
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -8,11 +8,15 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <dpmi.h>
 | 
			
		||||
#include <sys/exceptn.h>
 | 
			
		||||
#include <sys/segments.h>
 | 
			
		||||
 | 
			
		||||
#include "pc_hw.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define PC_CUTE_WHEEL 1 /* CuteMouse WheelAPI */
 | 
			
		||||
 | 
			
		||||
#define MOUSE_STACK_SIZE 16384
 | 
			
		||||
 | 
			
		||||
#define CLEAR_MICKEYS() \
 | 
			
		||||
@@ -21,20 +25,23 @@
 | 
			
		||||
            ox = oy = 0; \
 | 
			
		||||
        } while (0)
 | 
			
		||||
 | 
			
		||||
extern void mouse_wrapper (void);
 | 
			
		||||
extern void mouse_wrapper_end (void);
 | 
			
		||||
extern void mouse_wrap (void);
 | 
			
		||||
extern int mouse_wrap_end[];
 | 
			
		||||
 | 
			
		||||
static MFUNC mouse_func;
 | 
			
		||||
static void *mouse_stack;
 | 
			
		||||
static long mouse_callback;
 | 
			
		||||
static __dpmi_regs mouse_regs;
 | 
			
		||||
 | 
			
		||||
static volatile int pc_mouse_x, pc_mouse_y, pc_mouse_b;
 | 
			
		||||
static volatile struct {
 | 
			
		||||
       volatile int x, y, z, b;
 | 
			
		||||
} pc_mouse;
 | 
			
		||||
 | 
			
		||||
static int minx = 0;
 | 
			
		||||
static int maxx = 319;
 | 
			
		||||
static int miny = 0;
 | 
			
		||||
static int maxy = 199;
 | 
			
		||||
static int minz = 0;
 | 
			
		||||
static int maxz = 255;
 | 
			
		||||
 | 
			
		||||
static int sx = 2;
 | 
			
		||||
static int sy = 2;
 | 
			
		||||
@@ -43,27 +50,34 @@ static int emulat3 = FALSE;
 | 
			
		||||
 | 
			
		||||
static int ox, oy;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void mouse (__dpmi_regs *r)
 | 
			
		||||
{
 | 
			
		||||
 int nx = (signed short)r->x.si / sx;
 | 
			
		||||
 int ny = (signed short)r->x.di / sy;
 | 
			
		||||
 int dx = nx - ox;
 | 
			
		||||
 int dy = ny - oy;
 | 
			
		||||
#if PC_CUTE_WHEEL
 | 
			
		||||
 int dz = (signed char)r->h.bh;
 | 
			
		||||
#endif
 | 
			
		||||
 ox = nx;
 | 
			
		||||
 oy = ny;
 | 
			
		||||
 | 
			
		||||
 pc_mouse_b = r->x.bx;
 | 
			
		||||
 pc_mouse_x = MID(minx, pc_mouse_x + dx, maxx);
 | 
			
		||||
 pc_mouse_y = MID(miny, pc_mouse_y + dy, maxy);
 | 
			
		||||
 pc_mouse.b = r->h.bl;
 | 
			
		||||
 pc_mouse.x = MID(minx, pc_mouse.x + dx, maxx);
 | 
			
		||||
 pc_mouse.y = MID(miny, pc_mouse.y + dy, maxy);
 | 
			
		||||
#if PC_CUTE_WHEEL
 | 
			
		||||
 pc_mouse.z = MID(minz, pc_mouse.z + dz, maxz);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 if (emulat3) {
 | 
			
		||||
    if ((pc_mouse_b&3)==3) {
 | 
			
		||||
       pc_mouse_b = 4;
 | 
			
		||||
    if ((pc_mouse.b&3)==3) {
 | 
			
		||||
       pc_mouse.b = 4;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (mouse_func) {
 | 
			
		||||
    mouse_func(pc_mouse_x, pc_mouse_y, pc_mouse_b);
 | 
			
		||||
    mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
 | 
			
		||||
 }
 | 
			
		||||
} ENDOFUNC(mouse)
 | 
			
		||||
 | 
			
		||||
@@ -83,7 +97,7 @@ void pc_remove_mouse (void)
 | 
			
		||||
 | 
			
		||||
    mouse_callback = 0;
 | 
			
		||||
 | 
			
		||||
    free((void *)((unsigned long)mouse_stack-MOUSE_STACK_SIZE));
 | 
			
		||||
    free((void *)(mouse_wrap_end[0] - MOUSE_STACK_SIZE));
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -109,26 +123,26 @@ int pc_install_mouse (void)
 | 
			
		||||
 | 
			
		||||
 /* lock wrapper */
 | 
			
		||||
 LOCKDATA(mouse_func);
 | 
			
		||||
 LOCKDATA(mouse_stack);
 | 
			
		||||
 LOCKDATA(mouse_callback);
 | 
			
		||||
 LOCKDATA(mouse_regs);
 | 
			
		||||
 LOCKDATA(pc_mouse_x);
 | 
			
		||||
 LOCKDATA(pc_mouse_y);
 | 
			
		||||
 LOCKDATA(pc_mouse_b);
 | 
			
		||||
 LOCKDATA(pc_mouse);
 | 
			
		||||
 LOCKDATA(minx);
 | 
			
		||||
 LOCKDATA(maxx);
 | 
			
		||||
 LOCKDATA(miny);
 | 
			
		||||
 LOCKDATA(maxy);
 | 
			
		||||
 LOCKDATA(minz);
 | 
			
		||||
 LOCKDATA(maxz);
 | 
			
		||||
 LOCKDATA(sx);
 | 
			
		||||
 LOCKDATA(sy);
 | 
			
		||||
 LOCKDATA(emulat3);
 | 
			
		||||
 LOCKDATA(ox);
 | 
			
		||||
 LOCKDATA(oy);
 | 
			
		||||
 LOCKFUNC(mouse);
 | 
			
		||||
 LOCKFUNC(mouse_wrapper);
 | 
			
		||||
 LOCKFUNC(mouse_wrap);
 | 
			
		||||
 | 
			
		||||
 mouse_wrap_end[1] = __djgpp_ds_alias;
 | 
			
		||||
 /* grab a locked stack */
 | 
			
		||||
 if ((mouse_stack=pc_malloc(MOUSE_STACK_SIZE))==NULL) {
 | 
			
		||||
 if ((mouse_wrap_end[0] = (int)pc_malloc(MOUSE_STACK_SIZE)) == NULL) {
 | 
			
		||||
    return 0;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
@@ -150,19 +164,23 @@ int pc_install_mouse (void)
 | 
			
		||||
		movl	%%ecx, %0	\n\
 | 
			
		||||
	0:				\n\
 | 
			
		||||
 ":"=g"(mouse_callback)
 | 
			
		||||
  :"S" (mouse_wrapper), "D"(&mouse_regs)
 | 
			
		||||
  :"S" (mouse_wrap), "D"(&mouse_regs)
 | 
			
		||||
  :"%eax", "%ecx", "%edx");
 | 
			
		||||
 if (!mouse_callback) {
 | 
			
		||||
    free(mouse_stack);
 | 
			
		||||
    free((void *)mouse_wrap_end[0]);
 | 
			
		||||
    return 0;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* adjust stack */
 | 
			
		||||
 mouse_stack = (void *)((unsigned long)mouse_stack + MOUSE_STACK_SIZE);
 | 
			
		||||
 mouse_wrap_end[0] += MOUSE_STACK_SIZE;
 | 
			
		||||
 | 
			
		||||
 /* install the handler */
 | 
			
		||||
 mouse_regs.x.ax = 0x000c;
 | 
			
		||||
 mouse_regs.x.cx = 0x007f;
 | 
			
		||||
#if PC_CUTE_WHEEL
 | 
			
		||||
 mouse_regs.x.cx = 0x7f | 0x80;
 | 
			
		||||
#else
 | 
			
		||||
 mouse_regs.x.cx = 0x7f;
 | 
			
		||||
#endif
 | 
			
		||||
 mouse_regs.x.dx = mouse_callback&0xffff;
 | 
			
		||||
 mouse_regs.x.es = mouse_callback>>16;
 | 
			
		||||
 __dpmi_int(0x33, &mouse_regs);
 | 
			
		||||
@@ -205,54 +223,56 @@ void pc_mouse_speed (int xspeed, int yspeed)
 | 
			
		||||
 ENABLE();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pc_query_mouse (int *x, int *y)
 | 
			
		||||
int pc_query_mouse (int *x, int *y, int *z)
 | 
			
		||||
{
 | 
			
		||||
 *x = pc_mouse_x;
 | 
			
		||||
 *y = pc_mouse_y;
 | 
			
		||||
 return pc_mouse_b;
 | 
			
		||||
 *x = pc_mouse.x;
 | 
			
		||||
 *y = pc_mouse.y;
 | 
			
		||||
 *z = pc_mouse.z;
 | 
			
		||||
 return pc_mouse.b;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pc_show_mouse (void)
 | 
			
		||||
void pc_warp_mouse (int x, int y)
 | 
			
		||||
{
 | 
			
		||||
 /* not implemented */
 | 
			
		||||
}
 | 
			
		||||
void pc_scare_mouse (void)
 | 
			
		||||
{
 | 
			
		||||
 /* not implemented */
 | 
			
		||||
}
 | 
			
		||||
void pc_unscare_mouse (void)
 | 
			
		||||
{
 | 
			
		||||
 /* not implemented */
 | 
			
		||||
 CLEAR_MICKEYS();
 | 
			
		||||
 | 
			
		||||
 pc_mouse.x = MID(minx, x, maxx);
 | 
			
		||||
 pc_mouse.y = MID(miny, y, maxy);
 | 
			
		||||
 | 
			
		||||
 if (mouse_func) {
 | 
			
		||||
    mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Hack alert:
 | 
			
		||||
 * `mouse_wrap_end' actually holds the
 | 
			
		||||
 * address of stack in a safe data selector.
 | 
			
		||||
 */
 | 
			
		||||
__asm("\n\
 | 
			
		||||
		.text					\n\
 | 
			
		||||
		.balign	4				\n\
 | 
			
		||||
		.global	_mouse_wrapper			\n\
 | 
			
		||||
_mouse_wrapper:						\n\
 | 
			
		||||
		cld					\n\
 | 
			
		||||
		lodsl					\n\
 | 
			
		||||
		movl	%eax, %es:42(%edi)		\n\
 | 
			
		||||
		addw	$4, %es:46(%edi)		\n\
 | 
			
		||||
		pushl	%es				\n\
 | 
			
		||||
		movl	%ss, %ebx			\n\
 | 
			
		||||
		movl	%esp, %esi			\n\
 | 
			
		||||
		movl	%cs:___djgpp_ds_alias, %ss	\n\
 | 
			
		||||
		movl	%cs:_mouse_stack, %esp		\n\
 | 
			
		||||
		pushl	%ss				\n\
 | 
			
		||||
		pushl	%ss				\n\
 | 
			
		||||
		popl	%es				\n\
 | 
			
		||||
		popl	%ds				\n\
 | 
			
		||||
		movl	___djgpp_dos_sel, %fs		\n\
 | 
			
		||||
		pushl	%fs				\n\
 | 
			
		||||
		popl	%gs				\n\
 | 
			
		||||
		pushl	%edi				\n\
 | 
			
		||||
		call	_mouse				\n\
 | 
			
		||||
		popl	%edi				\n\
 | 
			
		||||
		movl	%ebx, %ss			\n\
 | 
			
		||||
		movl	%esi, %esp			\n\
 | 
			
		||||
		popl	%es				\n\
 | 
			
		||||
		iret					\n\
 | 
			
		||||
		.balign	4				\n\
 | 
			
		||||
		.global	_mouse_wrapper_end		\n\
 | 
			
		||||
_mouse_wrapper_end:");
 | 
			
		||||
		.text				\n\
 | 
			
		||||
		.p2align 5,,31			\n\
 | 
			
		||||
		.global	_mouse_wrap		\n\
 | 
			
		||||
_mouse_wrap:					\n\
 | 
			
		||||
		cld				\n\
 | 
			
		||||
		lodsl				\n\
 | 
			
		||||
		movl	%eax, %es:42(%edi)	\n\
 | 
			
		||||
		addw	$4, %es:46(%edi)	\n\
 | 
			
		||||
		pushl	%es			\n\
 | 
			
		||||
		movl	%ss, %ebx		\n\
 | 
			
		||||
		movl	%esp, %esi		\n\
 | 
			
		||||
		lss	%cs:_mouse_wrap_end, %esp\n\
 | 
			
		||||
		pushl	%ss			\n\
 | 
			
		||||
		pushl	%ss			\n\
 | 
			
		||||
		popl	%es			\n\
 | 
			
		||||
		popl	%ds			\n\
 | 
			
		||||
		movl	___djgpp_dos_sel, %fs	\n\
 | 
			
		||||
		pushl	%fs			\n\
 | 
			
		||||
		popl	%gs			\n\
 | 
			
		||||
		pushl	%edi			\n\
 | 
			
		||||
		call	_mouse			\n\
 | 
			
		||||
		popl	%edi			\n\
 | 
			
		||||
		movl	%ebx, %ss		\n\
 | 
			
		||||
		movl	%esi, %esp		\n\
 | 
			
		||||
		popl	%es			\n\
 | 
			
		||||
		iret				\n\
 | 
			
		||||
		.global	_mouse_wrap_end		\n\
 | 
			
		||||
_mouse_wrap_end:.long	0, 0");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PC/HW routine collection v1.0 for DOS/DJGPP
 | 
			
		||||
 * PC/HW routine collection v1.3 for DOS/DJGPP
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,7 +27,7 @@ typedef struct {
 | 
			
		||||
        volatile void *parm;
 | 
			
		||||
} TIMER;
 | 
			
		||||
 | 
			
		||||
TIMER timer_main, timer_func[MAX_TIMERS];
 | 
			
		||||
static TIMER timer_main, timer_func[MAX_TIMERS];
 | 
			
		||||
 | 
			
		||||
static int timer ()
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,56 +0,0 @@
 | 
			
		||||
 | 
			
		||||
/* Copyright (c) Mark J. Kilgard, 1994. */
 | 
			
		||||
 | 
			
		||||
/* This program is freely distributable without licensing fees
 | 
			
		||||
   and is provided without guarantee or warrantee expressed or
 | 
			
		||||
   implied. This program is -not- in the public domain. */
 | 
			
		||||
 | 
			
		||||
#include "glutbitmap.h"
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
glutBitmapCharacter(GLUTbitmapFont font, int c)
 | 
			
		||||
{
 | 
			
		||||
  const BitmapCharRec *ch;
 | 
			
		||||
  BitmapFontPtr fontinfo;
 | 
			
		||||
  GLint swapbytes, lsbfirst, rowlength;
 | 
			
		||||
  GLint skiprows, skippixels, alignment;
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
  fontinfo = (BitmapFontPtr) __glutFont(font);
 | 
			
		||||
#else
 | 
			
		||||
  fontinfo = (BitmapFontPtr) font;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  if (c < fontinfo->first ||
 | 
			
		||||
    c >= fontinfo->first + fontinfo->num_chars)
 | 
			
		||||
    return;
 | 
			
		||||
  ch = fontinfo->ch[c - fontinfo->first];
 | 
			
		||||
  if (ch) {
 | 
			
		||||
    /* Save current modes. */
 | 
			
		||||
    glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
 | 
			
		||||
    glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
 | 
			
		||||
    glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
 | 
			
		||||
    glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
 | 
			
		||||
    glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
 | 
			
		||||
    glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
 | 
			
		||||
    /* Little endian machines (DEC Alpha for example) could
 | 
			
		||||
       benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
 | 
			
		||||
       instead of GL_FALSE, but this would require changing the
 | 
			
		||||
       generated bitmaps too. */
 | 
			
		||||
    glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 | 
			
		||||
    glBitmap(ch->width, ch->height, ch->xorig, ch->yorig,
 | 
			
		||||
      ch->advance, 0, ch->bitmap);
 | 
			
		||||
    /* Restore saved modes. */
 | 
			
		||||
    glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
 | 
			
		||||
    glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,126 +27,138 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDisplayFunc (void (GLUTCALLBACK *func) (void))
 | 
			
		||||
 | 
			
		||||
GLUTidleCB g_idle_func = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDisplayFunc (GLUTdisplayCB func)
 | 
			
		||||
{
 | 
			
		||||
 display_func = func;
 | 
			
		||||
 g_curwin->display = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutReshapeFunc (void (GLUTCALLBACK *func) (int width, int height))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutReshapeFunc (GLUTreshapeCB func)
 | 
			
		||||
{
 | 
			
		||||
 reshape_func = func;
 | 
			
		||||
 g_curwin->reshape = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutKeyboardFunc (void (GLUTCALLBACK *func) (unsigned char key, int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutKeyboardFunc (GLUTkeyboardCB func)
 | 
			
		||||
{
 | 
			
		||||
 keyboard_func = func;
 | 
			
		||||
 g_curwin->keyboard = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMouseFunc (void (GLUTCALLBACK *func) (int button, int state, int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMouseFunc (GLUTmouseCB func)
 | 
			
		||||
{
 | 
			
		||||
 mouse_func = func;
 | 
			
		||||
 g_curwin->mouse = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMotionFunc (void (GLUTCALLBACK *func) (int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMotionFunc (GLUTmotionCB func)
 | 
			
		||||
{
 | 
			
		||||
 motion_func = func;
 | 
			
		||||
 g_curwin->motion = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPassiveMotionFunc (void (GLUTCALLBACK *func) (int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPassiveMotionFunc (GLUTpassiveCB func)
 | 
			
		||||
{
 | 
			
		||||
 passive_motion_func = func;
 | 
			
		||||
 g_curwin->passive = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutEntryFunc (void (GLUTCALLBACK *func) (int state))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutEntryFunc (GLUTentryCB func)
 | 
			
		||||
{
 | 
			
		||||
 entry_func = func;
 | 
			
		||||
 g_curwin->entry = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutVisibilityFunc (void (GLUTCALLBACK *func) (int state))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutVisibilityFunc (GLUTvisibilityCB func)
 | 
			
		||||
{
 | 
			
		||||
 visibility_func = func;
 | 
			
		||||
 g_curwin->visibility = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutIdleFunc (void (GLUTCALLBACK *func) (void))
 | 
			
		||||
{
 | 
			
		||||
 idle_func = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutTimerFunc (unsigned int millis, void (GLUTCALLBACK *func) (int value), int value)
 | 
			
		||||
void APIENTRY glutWindowStatusFunc (GLUTwindowStatusCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMenuStateFunc (void (GLUTCALLBACK *func) (int state))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutIdleFunc (GLUTidleCB func)
 | 
			
		||||
{
 | 
			
		||||
 menu_state_func = func;
 | 
			
		||||
 g_idle_func = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpecialFunc (void (GLUTCALLBACK *func) (int key, int x, int y))
 | 
			
		||||
{
 | 
			
		||||
 special_func = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpaceballMotionFunc (void (GLUTCALLBACK *func) (int x, int y, int z))
 | 
			
		||||
void APIENTRY glutTimerFunc (unsigned int millis, GLUTtimerCB func, int value)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpaceballRotateFunc (void (GLUTCALLBACK *func) (int x, int y, int z))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpecialFunc (GLUTspecialCB func)
 | 
			
		||||
{
 | 
			
		||||
 g_curwin->special = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpaceballMotionFunc (GLUTspaceMotionCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpaceballButtonFunc (void (GLUTCALLBACK *func) (int button, int state))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpaceballRotateFunc (GLUTspaceRotateCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutButtonBoxFunc (void (GLUTCALLBACK *func) (int button, int state))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSpaceballButtonFunc (GLUTspaceButtonCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDialsFunc (void (GLUTCALLBACK *func) (int dial, int value))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDialsFunc (GLUTdialsCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutTabletMotionFunc (void (GLUTCALLBACK *func) (int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutButtonBoxFunc (GLUTbuttonBoxCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutTabletButtonFunc (void (GLUTCALLBACK *func) (int button, int state, int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutTabletMotionFunc (GLUTtabletMotionCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMenuStatusFunc (void (GLUTCALLBACK *func) (int status, int x, int y))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutTabletButtonFunc (GLUTtabletButtonCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutOverlayDisplayFunc (void (GLUTCALLBACK *func) (void))
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutWindowStatusFunc (void (GLUTCALLBACK *func) (int state))
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutJoystickFunc (GLUTjoystickCB func, int interval)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,20 +27,33 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
#include "GL/dmesa.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define CLAMP(i) ((i) > 1.0 ? 1.0 : ((i) < 0.0 ? 0.0 : (i)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSetColor (int ndx, GLfloat red, GLfloat green, GLfloat blue)
 | 
			
		||||
{
 | 
			
		||||
 if (g_display_mode & GLUT_INDEX) {
 | 
			
		||||
    if ((ndx >= 0) && (ndx < (256 - RESERVED_COLORS))) {
 | 
			
		||||
       DMesaSetCI(ndx, CLAMP(red), CLAMP(green), CLAMP(blue));
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GLfloat APIENTRY glutGetColor (int ndx, int component)
 | 
			
		||||
{
 | 
			
		||||
 return 0.0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutCopyColormap (int win)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								src/glut/dos/extens.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/glut/dos/extens.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * Copyright (C) 1995-1998  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Library General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Library General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Library General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutExtensionSupported (const char *extension)
 | 
			
		||||
{
 | 
			
		||||
 static const GLubyte *extensions = NULL;
 | 
			
		||||
 const GLubyte *last, *where;
 | 
			
		||||
 | 
			
		||||
 /* Extension names should not have spaces. */
 | 
			
		||||
 if (strchr(extension, ' ') || *extension == '\0') {
 | 
			
		||||
    return GL_FALSE;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* Not my problem if you don't have a valid OpenGL context */
 | 
			
		||||
 if (!extensions) {
 | 
			
		||||
    extensions = glGetString(GL_EXTENSIONS);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* Take care of sub-strings etc. */
 | 
			
		||||
 for (last = extensions;;) {
 | 
			
		||||
     if ((where = (GLubyte *)strstr((const char *)last, extension)) == NULL) {
 | 
			
		||||
        return GL_FALSE;
 | 
			
		||||
     }
 | 
			
		||||
     last = where + strlen(extension);
 | 
			
		||||
     if (where == extensions || *(where - 1) == ' ') {
 | 
			
		||||
        if (*last == ' ' || *last == '\0') {
 | 
			
		||||
           return GL_TRUE;
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * Copyright (C) 1995-1998  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Library General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Library General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Library General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
GLenum    g_display_mode = 0;
 | 
			
		||||
GLuint    g_width        = DEFAULT_WIDTH;
 | 
			
		||||
GLuint    g_height       = DEFAULT_HEIGHT;
 | 
			
		||||
GLint     g_mouse        = GL_FALSE;
 | 
			
		||||
GLboolean g_redisplay    = GL_FALSE;
 | 
			
		||||
GLint     g_xpos         = 0;
 | 
			
		||||
GLint     g_ypos         = 0;
 | 
			
		||||
 | 
			
		||||
void (GLUTCALLBACK *display_func) (void)                              = NULL;
 | 
			
		||||
void (GLUTCALLBACK *reshape_func) (int width, int height)             = NULL;
 | 
			
		||||
void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y)  = NULL;
 | 
			
		||||
void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y) = NULL;
 | 
			
		||||
void (GLUTCALLBACK *motion_func) (int x, int y)                       = NULL;
 | 
			
		||||
void (GLUTCALLBACK *passive_motion_func) (int x, int y)               = NULL;
 | 
			
		||||
void (GLUTCALLBACK *entry_func) (int state)                           = NULL;
 | 
			
		||||
void (GLUTCALLBACK *visibility_func) (int state)                      = NULL;
 | 
			
		||||
void (GLUTCALLBACK *idle_func) (void)                                 = NULL;
 | 
			
		||||
void (GLUTCALLBACK *menu_state_func) (int state)                      = NULL;
 | 
			
		||||
void (GLUTCALLBACK *special_func) (int key, int x, int y)             = NULL;
 | 
			
		||||
void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z)      = NULL;
 | 
			
		||||
void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z)      = NULL;
 | 
			
		||||
void (GLUTCALLBACK *spaceball_button_func) (int button, int state)    = NULL;
 | 
			
		||||
void (GLUTCALLBACK *button_box_func) (int button, int state)          = NULL;
 | 
			
		||||
void (GLUTCALLBACK *dials_func) (int dial, int value)                 = NULL;
 | 
			
		||||
void (GLUTCALLBACK *tablet_motion_func) (int x, int y)                = NULL;
 | 
			
		||||
void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y) = NULL;
 | 
			
		||||
void (GLUTCALLBACK *menu_status_func) (int status, int x, int y)      = NULL;
 | 
			
		||||
void (GLUTCALLBACK *overlay_display_func) (void)                      = NULL;
 | 
			
		||||
void (GLUTCALLBACK *window_status_func) (int state)                   = NULL;
 | 
			
		||||
							
								
								
									
										150
									
								
								src/glut/dos/glutint.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								src/glut/dos/glutint.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,150 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.0
 | 
			
		||||
 * Copyright (C) 1995-1998  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Library General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Library General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Library General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
#ifndef __glutint_h__
 | 
			
		||||
#define __glutint_h__
 | 
			
		||||
 | 
			
		||||
#include <GL/glut.h>
 | 
			
		||||
 | 
			
		||||
#include "GL/dmesa.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* GLUT  function types */
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTdisplayCB) (void);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTreshapeCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTkeyboardCB) (unsigned char, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTmouseCB) (int, int, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTmotionCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTpassiveCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTentryCB) (int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTvisibilityCB) (int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTwindowStatusCB) (int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTidleCB) (void);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTtimerCB) (int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTmenuStateCB) (int);  /* DEPRECATED. */
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTmenuStatusCB) (int, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTselectCB) (int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTspecialCB) (int, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTspaceMotionCB) (int, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTspaceRotateCB) (int, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTspaceButtonCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTdialsCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTbuttonBoxCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTtabletMotionCB) (int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTtabletButtonCB) (int, int, int, int);
 | 
			
		||||
typedef void (GLUTCALLBACK *GLUTjoystickCB) (unsigned int, int, int, int);
 | 
			
		||||
 | 
			
		||||
typedef struct GLUTwindow {
 | 
			
		||||
        int num;                         /* window id */
 | 
			
		||||
 | 
			
		||||
        DMesaBuffer buffer;
 | 
			
		||||
 | 
			
		||||
        int show_mouse;
 | 
			
		||||
 | 
			
		||||
        /* GLUT settable or visible window state. */
 | 
			
		||||
        int xpos;
 | 
			
		||||
        int ypos;
 | 
			
		||||
        int width;                       /* window width in pixels */
 | 
			
		||||
        int height;                      /* window height in pixels */
 | 
			
		||||
 | 
			
		||||
        /* Per-window callbacks. */
 | 
			
		||||
        GLUTdisplayCB      display;      /* redraw */
 | 
			
		||||
        GLUTreshapeCB      reshape;      /* resize (width,height) */
 | 
			
		||||
        GLUTmouseCB        mouse;        /* mouse (button,state,x,y) */
 | 
			
		||||
        GLUTmotionCB       motion;       /* motion (x,y) */
 | 
			
		||||
        GLUTpassiveCB      passive;      /* passive motion (x,y) */
 | 
			
		||||
        GLUTentryCB        entry;        /* window entry/exit (state) */
 | 
			
		||||
        GLUTkeyboardCB     keyboard;     /* keyboard (ASCII,x,y) */
 | 
			
		||||
        GLUTkeyboardCB     keyboardUp;   /* keyboard up (ASCII,x,y) */
 | 
			
		||||
        GLUTwindowStatusCB windowStatus; /* window status */
 | 
			
		||||
        GLUTvisibilityCB   visibility;   /* visibility */
 | 
			
		||||
        GLUTspecialCB      special;      /* special key */
 | 
			
		||||
        GLUTspecialCB      specialUp;    /* special up key */
 | 
			
		||||
        GLUTbuttonBoxCB    buttonBox;    /* button box */
 | 
			
		||||
        GLUTdialsCB        dials;        /* dials */
 | 
			
		||||
        GLUTspaceMotionCB  spaceMotion;  /* Spaceball motion */
 | 
			
		||||
        GLUTspaceRotateCB  spaceRotate;  /* Spaceball rotate */
 | 
			
		||||
        GLUTspaceButtonCB  spaceButton;  /* Spaceball button */
 | 
			
		||||
        GLUTtabletMotionCB tabletMotion; /* tablet motion */
 | 
			
		||||
        GLUTtabletButtonCB tabletButton; /* tablet button */
 | 
			
		||||
        GLUTjoystickCB     joystick;     /* joystick */
 | 
			
		||||
} GLUTwindow;
 | 
			
		||||
 | 
			
		||||
extern GLUTidleCB g_idle_func;
 | 
			
		||||
extern GLUTmenuStatusCB g_menu_status_func;
 | 
			
		||||
 | 
			
		||||
extern GLboolean g_redisplay;
 | 
			
		||||
 | 
			
		||||
extern GLuint g_bpp;                  /* HW: bits per pixel */
 | 
			
		||||
extern GLuint g_refresh;              /* HW: vertical refresh rate */
 | 
			
		||||
extern GLuint g_screen_w, g_screen_h; /* HW: physical screen size */
 | 
			
		||||
extern GLint g_driver_caps;
 | 
			
		||||
 | 
			
		||||
extern GLuint g_fps;
 | 
			
		||||
 | 
			
		||||
extern GLuint g_display_mode;         /* display bits */
 | 
			
		||||
extern int g_init_x, g_init_y;        /* initial window position */
 | 
			
		||||
extern GLuint g_init_w, g_init_h;     /* initial window size */
 | 
			
		||||
 | 
			
		||||
extern int g_mouse;                   /* non-zero if mouse installed */
 | 
			
		||||
extern int g_mouse_x, g_mouse_y;      /* mouse coords, relative to current win */
 | 
			
		||||
 | 
			
		||||
extern GLUTwindow *g_curwin;          /* current window */
 | 
			
		||||
 | 
			
		||||
extern char *__glutProgramName;       /* program name */
 | 
			
		||||
 | 
			
		||||
extern void __glutInitMouse (void);
 | 
			
		||||
 | 
			
		||||
/* private routines from glut_util.c */
 | 
			
		||||
extern char * __glutStrdup(const char *string);
 | 
			
		||||
extern void __glutWarning(char *format,...);
 | 
			
		||||
extern void __glutFatalError(char *format,...);
 | 
			
		||||
extern void __glutFatalUsage(char *format,...);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* hmmm... */
 | 
			
		||||
#include "pc_hw/pc_hw.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define MAX_WINDOWS 2
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_WIDTH  300
 | 
			
		||||
#define DEFAULT_HEIGHT 300
 | 
			
		||||
#define DEFAULT_BPP    16
 | 
			
		||||
 | 
			
		||||
#define DEPTH_SIZE   16
 | 
			
		||||
#define STENCIL_SIZE 8
 | 
			
		||||
#define ACCUM_SIZE   16
 | 
			
		||||
 | 
			
		||||
#define RESERVED_COLORS 0
 | 
			
		||||
 | 
			
		||||
#endif /* __glutint_h__ */
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,39 +27,86 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutInit (int *argcp, char **argv)
 | 
			
		||||
 | 
			
		||||
GLboolean g_redisplay = GL_FALSE;
 | 
			
		||||
 | 
			
		||||
GLuint g_bpp = DEFAULT_BPP;
 | 
			
		||||
GLuint g_refresh = 0;
 | 
			
		||||
GLuint g_screen_w, g_screen_h;
 | 
			
		||||
GLint g_driver_caps;
 | 
			
		||||
 | 
			
		||||
GLuint g_fps = 0;
 | 
			
		||||
 | 
			
		||||
GLuint g_display_mode = 0;
 | 
			
		||||
int g_init_x = 0, g_init_y = 0;
 | 
			
		||||
GLuint g_init_w = DEFAULT_WIDTH, g_init_h = DEFAULT_HEIGHT;
 | 
			
		||||
 | 
			
		||||
char *__glutProgramName = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutInit (int *argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
 char *str;
 | 
			
		||||
 const char *env;
 | 
			
		||||
 | 
			
		||||
 if ((env = getenv("DMESA_GLUT_BPP")) != NULL) {
 | 
			
		||||
    g_bpp = atoi(env);
 | 
			
		||||
 }
 | 
			
		||||
 if ((env = getenv("DMESA_GLUT_REFRESH")) != NULL) {
 | 
			
		||||
    g_refresh = atoi(env);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* Determine program name. */
 | 
			
		||||
 str = strrchr(argv[0], '/');
 | 
			
		||||
 if (str == NULL) {
 | 
			
		||||
    str = argv[0];
 | 
			
		||||
 } else {
 | 
			
		||||
    str++;
 | 
			
		||||
 }
 | 
			
		||||
 __glutProgramName = __glutStrdup(str);
 | 
			
		||||
 | 
			
		||||
 /* check if GLUT_FPS env var is set */
 | 
			
		||||
 if ((env = getenv("GLUT_FPS")) != NULL) {
 | 
			
		||||
    if ((g_fps = atoi(env)) <= 0) {
 | 
			
		||||
       g_fps = 5000; /* 5000 milliseconds */
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* Initialize timer */
 | 
			
		||||
 glutGet(GLUT_ELAPSED_TIME);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutInitDisplayMode (unsigned int mode)
 | 
			
		||||
{
 | 
			
		||||
 g_display_mode = mode;
 | 
			
		||||
 | 
			
		||||
 pc_install_keyb();
 | 
			
		||||
 g_mouse = pc_install_mouse();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutInitWindowPosition (int x, int y)
 | 
			
		||||
{
 | 
			
		||||
 g_xpos = x;
 | 
			
		||||
 g_ypos = y;
 | 
			
		||||
 g_init_x = x;
 | 
			
		||||
 g_init_y = y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutInitWindowSize (int width, int height)
 | 
			
		||||
{
 | 
			
		||||
 g_width  = width;
 | 
			
		||||
 g_height = height;
 | 
			
		||||
 g_init_w = width;
 | 
			
		||||
 g_init_h = height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMainLoop (void)
 | 
			
		||||
{
 | 
			
		||||
 GLboolean idle;
 | 
			
		||||
@@ -67,94 +114,141 @@ void APIENTRY glutMainLoop (void)
 | 
			
		||||
 static int old_mouse_y = 0;
 | 
			
		||||
 static int old_mouse_b = 0;
 | 
			
		||||
 | 
			
		||||
 {
 | 
			
		||||
  GLint screen_size[2];
 | 
			
		||||
  DMesaGetIntegerv(DMESA_GET_SCREEN_SIZE, screen_size);
 | 
			
		||||
  g_screen_w = screen_size[0];
 | 
			
		||||
  g_screen_h = screen_size[1];
 | 
			
		||||
  DMesaGetIntegerv(DMESA_GET_DRIVER_CAPS, &g_driver_caps);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 pc_install_keyb();
 | 
			
		||||
 __glutInitMouse();
 | 
			
		||||
 | 
			
		||||
 glutPostRedisplay();
 | 
			
		||||
 if (reshape_func) reshape_func(g_width, g_height);
 | 
			
		||||
 if (visibility_func) visibility_func(GLUT_VISIBLE);
 | 
			
		||||
 if (g_mouse) pc_show_mouse();
 | 
			
		||||
 if (g_curwin->reshape) {
 | 
			
		||||
    g_curwin->reshape(g_curwin->width, g_curwin->height);
 | 
			
		||||
 }
 | 
			
		||||
 if (g_curwin->visibility) {
 | 
			
		||||
    g_curwin->visibility(GLUT_VISIBLE);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 while (GL_TRUE) {
 | 
			
		||||
       idle = GL_TRUE;
 | 
			
		||||
 | 
			
		||||
       if (g_redisplay && display_func) {
 | 
			
		||||
       if (g_redisplay && g_curwin->display) {
 | 
			
		||||
          idle        = GL_FALSE;
 | 
			
		||||
          g_redisplay = GL_FALSE;
 | 
			
		||||
 | 
			
		||||
          if (g_mouse && !(g_display_mode & GLUT_DOUBLE)) pc_scare_mouse();
 | 
			
		||||
          display_func();
 | 
			
		||||
          if (g_mouse && !(g_display_mode & GLUT_DOUBLE)) pc_unscare_mouse();
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       if (pc_keypressed()) {
 | 
			
		||||
          int key;
 | 
			
		||||
 | 
			
		||||
          idle = GL_FALSE;
 | 
			
		||||
          key  = pc_readkey();
 | 
			
		||||
 | 
			
		||||
          switch (key>>16) {
 | 
			
		||||
                 case KEY_F1:     if (special_func) special_func(GLUT_KEY_F1,        0, 0); break;
 | 
			
		||||
                 case KEY_F2:     if (special_func) special_func(GLUT_KEY_F2,        0, 0); break;
 | 
			
		||||
                 case KEY_F3:     if (special_func) special_func(GLUT_KEY_F3,        0, 0); break;
 | 
			
		||||
                 case KEY_F4:     if (special_func) special_func(GLUT_KEY_F4,        0, 0); break;
 | 
			
		||||
                 case KEY_F5:     if (special_func) special_func(GLUT_KEY_F5,        0, 0); break;
 | 
			
		||||
                 case KEY_F6:     if (special_func) special_func(GLUT_KEY_F6,        0, 0); break;
 | 
			
		||||
                 case KEY_F7:     if (special_func) special_func(GLUT_KEY_F7,        0, 0); break;
 | 
			
		||||
                 case KEY_F8:     if (special_func) special_func(GLUT_KEY_F8,        0, 0); break;
 | 
			
		||||
                 case KEY_F9:     if (special_func) special_func(GLUT_KEY_F9,        0, 0); break;
 | 
			
		||||
                 case KEY_F10:    if (special_func) special_func(GLUT_KEY_F10,       0, 0); break;
 | 
			
		||||
                 case KEY_F11:    if (special_func) special_func(GLUT_KEY_F11,       0, 0); break;
 | 
			
		||||
                 case KEY_F12:    if (special_func) special_func(GLUT_KEY_F12,       0, 0); break;
 | 
			
		||||
                 case KEY_LEFT:   if (special_func) special_func(GLUT_KEY_LEFT,      0, 0); break;
 | 
			
		||||
                 case KEY_UP:     if (special_func) special_func(GLUT_KEY_UP,        0, 0); break;
 | 
			
		||||
                 case KEY_RIGHT:  if (special_func) special_func(GLUT_KEY_RIGHT,     0, 0); break;
 | 
			
		||||
                 case KEY_DOWN:   if (special_func) special_func(GLUT_KEY_DOWN,      0, 0); break;
 | 
			
		||||
                 case KEY_PGUP:   if (special_func) special_func(GLUT_KEY_PAGE_UP,   0, 0); break;
 | 
			
		||||
                 case KEY_PGDN:   if (special_func) special_func(GLUT_KEY_PAGE_DOWN, 0, 0); break;
 | 
			
		||||
                 case KEY_HOME:   if (special_func) special_func(GLUT_KEY_HOME,      0, 0); break;
 | 
			
		||||
                 case KEY_END:    if (special_func) special_func(GLUT_KEY_END,       0, 0); break;
 | 
			
		||||
                 case KEY_INSERT: if (special_func) special_func(GLUT_KEY_INSERT,    0, 0); break;
 | 
			
		||||
                 default:         if (keyboard_func) keyboard_func(key & 0xFF, 0, 0);
 | 
			
		||||
          if (g_curwin->show_mouse && !(g_display_mode & GLUT_DOUBLE)) {
 | 
			
		||||
             /* XXX scare mouse */
 | 
			
		||||
             g_curwin->display();
 | 
			
		||||
             /* XXX unscare mouse */
 | 
			
		||||
          } else {
 | 
			
		||||
             g_curwin->display();
 | 
			
		||||
          }
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       if (g_mouse) {
 | 
			
		||||
          int mouse_x;
 | 
			
		||||
          int mouse_y;
 | 
			
		||||
          int mouse_z;
 | 
			
		||||
          int mouse_b;
 | 
			
		||||
       
 | 
			
		||||
          mouse_b = pc_query_mouse(&mouse_x, &mouse_y);
 | 
			
		||||
          
 | 
			
		||||
          if (motion_func && ((mouse_x != old_mouse_x) || (mouse_y != old_mouse_y))) {
 | 
			
		||||
 | 
			
		||||
          /* query mouse */
 | 
			
		||||
          mouse_b = pc_query_mouse(&mouse_x, &mouse_y, &mouse_z);
 | 
			
		||||
 | 
			
		||||
          /* relative to window coordinates */
 | 
			
		||||
          g_mouse_x = mouse_x - g_curwin->xpos;
 | 
			
		||||
          g_mouse_y = mouse_y - g_curwin->ypos;
 | 
			
		||||
 | 
			
		||||
          /* mouse was moved? */
 | 
			
		||||
          if ((mouse_x != old_mouse_x) || (mouse_y != old_mouse_y)) {
 | 
			
		||||
             idle        = GL_FALSE;
 | 
			
		||||
             old_mouse_x = mouse_x;
 | 
			
		||||
             old_mouse_y = mouse_y;
 | 
			
		||||
   
 | 
			
		||||
             motion_func(old_mouse_x, old_mouse_y);
 | 
			
		||||
 | 
			
		||||
             if (mouse_b) {
 | 
			
		||||
                /* any button pressed */
 | 
			
		||||
                if (g_curwin->motion) {
 | 
			
		||||
                   g_curwin->motion(g_mouse_x, g_mouse_y);
 | 
			
		||||
                }
 | 
			
		||||
             } else {
 | 
			
		||||
                /* no button pressed */
 | 
			
		||||
                if (g_curwin->passive) {
 | 
			
		||||
                   g_curwin->passive(g_mouse_x, g_mouse_y);
 | 
			
		||||
                }
 | 
			
		||||
             }
 | 
			
		||||
          }
 | 
			
		||||
   
 | 
			
		||||
          if (mouse_func && (mouse_b != old_mouse_b)) {
 | 
			
		||||
             int new_mouse_b = mouse_b;
 | 
			
		||||
   
 | 
			
		||||
             if ((old_mouse_b & 1) && !(new_mouse_b & 1))
 | 
			
		||||
                mouse_func(GLUT_LEFT_BUTTON, GLUT_UP,   mouse_x, mouse_y);
 | 
			
		||||
             else if (!(old_mouse_b & 1) && (new_mouse_b & 1))
 | 
			
		||||
                mouse_func(GLUT_LEFT_BUTTON, GLUT_DOWN, mouse_x, mouse_y);
 | 
			
		||||
   
 | 
			
		||||
             if ((old_mouse_b & 2) && !(new_mouse_b & 2))
 | 
			
		||||
                mouse_func(GLUT_RIGHT_BUTTON, GLUT_UP,   mouse_x, mouse_y);
 | 
			
		||||
             else if (!(old_mouse_b & 2) && (new_mouse_b & 2))
 | 
			
		||||
                mouse_func(GLUT_RIGHT_BUTTON, GLUT_DOWN, mouse_x, mouse_y);
 | 
			
		||||
   
 | 
			
		||||
             if ((old_mouse_b & 4) && !(new_mouse_b & 4))
 | 
			
		||||
                mouse_func(GLUT_MIDDLE_BUTTON, GLUT_UP,   mouse_x, mouse_y);
 | 
			
		||||
             else if (!(old_mouse_b & 3) && (new_mouse_b & 4))
 | 
			
		||||
                mouse_func(GLUT_MIDDLE_BUTTON, GLUT_DOWN, mouse_x, mouse_y);
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
          /* button state changed? */
 | 
			
		||||
          if (mouse_b != old_mouse_b) {
 | 
			
		||||
             GLUTmouseCB mouse_func;
 | 
			
		||||
 | 
			
		||||
             if ((mouse_func = g_curwin->mouse)) {
 | 
			
		||||
                if ((old_mouse_b & 1) && !(mouse_b & 1))
 | 
			
		||||
                   mouse_func(GLUT_LEFT_BUTTON, GLUT_UP,     g_mouse_x, g_mouse_y);
 | 
			
		||||
                else if (!(old_mouse_b & 1) && (mouse_b & 1))
 | 
			
		||||
                   mouse_func(GLUT_LEFT_BUTTON, GLUT_DOWN,   g_mouse_x, g_mouse_y);
 | 
			
		||||
 | 
			
		||||
                if ((old_mouse_b & 2) && !(mouse_b & 2))
 | 
			
		||||
                   mouse_func(GLUT_RIGHT_BUTTON, GLUT_UP,    g_mouse_x, g_mouse_y);
 | 
			
		||||
                else if (!(old_mouse_b & 2) && (mouse_b & 2))
 | 
			
		||||
                   mouse_func(GLUT_RIGHT_BUTTON, GLUT_DOWN,  g_mouse_x, g_mouse_y);
 | 
			
		||||
 | 
			
		||||
                if ((old_mouse_b & 4) && !(mouse_b & 4))
 | 
			
		||||
                   mouse_func(GLUT_MIDDLE_BUTTON, GLUT_UP,   g_mouse_x, g_mouse_y);
 | 
			
		||||
                else if (!(old_mouse_b & 3) && (mouse_b & 4))
 | 
			
		||||
                   mouse_func(GLUT_MIDDLE_BUTTON, GLUT_DOWN, g_mouse_x, g_mouse_y);
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
             idle        = GL_FALSE;
 | 
			
		||||
             old_mouse_b = new_mouse_b;
 | 
			
		||||
             old_mouse_b = mouse_b;
 | 
			
		||||
          }
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       if (idle && idle_func)
 | 
			
		||||
          idle_func();
 | 
			
		||||
       if (pc_keypressed()) {
 | 
			
		||||
          int key;
 | 
			
		||||
          int glut_key;
 | 
			
		||||
 | 
			
		||||
          idle = GL_FALSE;
 | 
			
		||||
          key  = pc_readkey();
 | 
			
		||||
 | 
			
		||||
          switch (key>>16) {
 | 
			
		||||
                 case KEY_F1:     glut_key = GLUT_KEY_F1;        goto special;
 | 
			
		||||
                 case KEY_F2:     glut_key = GLUT_KEY_F2;        goto special;
 | 
			
		||||
                 case KEY_F3:     glut_key = GLUT_KEY_F3;        goto special;
 | 
			
		||||
                 case KEY_F4:     glut_key = GLUT_KEY_F4;        goto special;
 | 
			
		||||
                 case KEY_F5:     glut_key = GLUT_KEY_F5;        goto special;
 | 
			
		||||
                 case KEY_F6:     glut_key = GLUT_KEY_F6;        goto special;
 | 
			
		||||
                 case KEY_F7:     glut_key = GLUT_KEY_F7;        goto special;
 | 
			
		||||
                 case KEY_F8:     glut_key = GLUT_KEY_F8;        goto special;
 | 
			
		||||
                 case KEY_F9:     glut_key = GLUT_KEY_F9;        goto special;
 | 
			
		||||
                 case KEY_F10:    glut_key = GLUT_KEY_F10;       goto special;
 | 
			
		||||
                 case KEY_F11:    glut_key = GLUT_KEY_F11;       goto special;
 | 
			
		||||
                 case KEY_F12:    glut_key = GLUT_KEY_F12;       goto special;
 | 
			
		||||
                 case KEY_LEFT:   glut_key = GLUT_KEY_LEFT;      goto special;
 | 
			
		||||
                 case KEY_UP:     glut_key = GLUT_KEY_UP;        goto special;
 | 
			
		||||
                 case KEY_RIGHT:  glut_key = GLUT_KEY_RIGHT;     goto special;
 | 
			
		||||
                 case KEY_DOWN:   glut_key = GLUT_KEY_DOWN;      goto special;
 | 
			
		||||
                 case KEY_PGUP:   glut_key = GLUT_KEY_PAGE_UP;   goto special;
 | 
			
		||||
                 case KEY_PGDN:   glut_key = GLUT_KEY_PAGE_DOWN; goto special;
 | 
			
		||||
                 case KEY_HOME:   glut_key = GLUT_KEY_HOME;      goto special;
 | 
			
		||||
                 case KEY_END:    glut_key = GLUT_KEY_END;       goto special;
 | 
			
		||||
                 case KEY_INSERT: glut_key = GLUT_KEY_INSERT;    goto special;
 | 
			
		||||
                 special:
 | 
			
		||||
                      if (g_curwin->special) {
 | 
			
		||||
                         g_curwin->special(glut_key, g_mouse_x, g_mouse_y);
 | 
			
		||||
                      }
 | 
			
		||||
                      break;
 | 
			
		||||
                 default:
 | 
			
		||||
                      if (g_curwin->keyboard) {
 | 
			
		||||
                         g_curwin->keyboard(key & 0xFF, g_mouse_x, g_mouse_y);
 | 
			
		||||
                      }
 | 
			
		||||
          }
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       if (idle && g_idle_func)
 | 
			
		||||
          g_idle_func();
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,78 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.0
 | 
			
		||||
 * Copyright (C) 1995-1998  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Library General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Library General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Library General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
#ifndef INTERNAL_H_included
 | 
			
		||||
#define INTERNAL_H_included
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "pc_hw/pc_hw.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define MAX_WINDOWS    4
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_WIDTH  640
 | 
			
		||||
#define DEFAULT_HEIGHT 480
 | 
			
		||||
#define DEFAULT_BPP    16
 | 
			
		||||
 | 
			
		||||
#define DEPTH_SIZE   16
 | 
			
		||||
#define STENCIL_SIZE 8
 | 
			
		||||
#define ACCUM_SIZE   16
 | 
			
		||||
 | 
			
		||||
extern GLenum    g_display_mode;
 | 
			
		||||
extern GLuint    g_width;
 | 
			
		||||
extern GLuint    g_height;
 | 
			
		||||
extern GLint     g_mouse;
 | 
			
		||||
extern GLboolean g_redisplay;
 | 
			
		||||
extern GLint     g_xpos;
 | 
			
		||||
extern GLint     g_ypos;
 | 
			
		||||
 | 
			
		||||
extern void (GLUTCALLBACK *display_func) (void);
 | 
			
		||||
extern void (GLUTCALLBACK *reshape_func) (int width, int height);
 | 
			
		||||
extern void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *motion_func) (int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *passive_motion_func) (int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *entry_func) (int state);
 | 
			
		||||
extern void (GLUTCALLBACK *visibility_func) (int state);
 | 
			
		||||
extern void (GLUTCALLBACK *idle_func) (void);
 | 
			
		||||
extern void (GLUTCALLBACK *menu_state_func) (int state);
 | 
			
		||||
extern void (GLUTCALLBACK *special_func) (int key, int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z);
 | 
			
		||||
extern void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z);
 | 
			
		||||
extern void (GLUTCALLBACK *spaceball_button_func) (int button, int state);
 | 
			
		||||
extern void (GLUTCALLBACK *button_box_func) (int button, int state);
 | 
			
		||||
extern void (GLUTCALLBACK *dials_func) (int dial, int value);
 | 
			
		||||
extern void (GLUTCALLBACK *tablet_motion_func) (int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *menu_status_func) (int status, int x, int y);
 | 
			
		||||
extern void (GLUTCALLBACK *overlay_display_func) (void);
 | 
			
		||||
extern void (GLUTCALLBACK *window_status_func) (int state);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,60 +27,90 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutCreateMenu (void (GLUTCALLBACK *func) (int))
 | 
			
		||||
 | 
			
		||||
GLUTmenuStatusCB g_menu_status_func = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMenuStateFunc (GLUTmenuStateCB func)
 | 
			
		||||
{
 | 
			
		||||
 g_menu_status_func = (GLUTmenuStatusCB)func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutMenuStatusFunc (GLUTmenuStatusCB func)
 | 
			
		||||
{
 | 
			
		||||
 g_menu_status_func = func;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutCreateMenu (GLUTselectCB func)
 | 
			
		||||
{
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDestroyMenu (int menu)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutGetMenu (void)
 | 
			
		||||
{
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSetMenu (int menu)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutAddMenuEntry (const char *label, int value)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutAddSubMenu (const char *label, int submenu)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutChangeToMenuEntry (int item, const char *label, int value)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutChangeToSubMenu (int item, const char *label, int submenu)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutRemoveMenuItem (int item)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutAttachMenu (int button)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDetachMenu (int button)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,598 +0,0 @@
 | 
			
		||||
 | 
			
		||||
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
(c) Copyright 1993, Silicon Graphics, Inc.
 | 
			
		||||
 | 
			
		||||
ALL RIGHTS RESERVED
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and distribute this software
 | 
			
		||||
for any purpose and without fee is hereby granted, provided
 | 
			
		||||
that the above copyright notice appear in all copies and that
 | 
			
		||||
both the copyright notice and this permission notice appear in
 | 
			
		||||
supporting documentation, and that the name of Silicon
 | 
			
		||||
Graphics, Inc. not be used in advertising or publicity
 | 
			
		||||
pertaining to distribution of the software without specific,
 | 
			
		||||
written prior permission.
 | 
			
		||||
 | 
			
		||||
THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
 | 
			
		||||
"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
 | 
			
		||||
OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
 | 
			
		||||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
 | 
			
		||||
EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
 | 
			
		||||
ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
 | 
			
		||||
CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
 | 
			
		||||
INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
 | 
			
		||||
SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
 | 
			
		||||
NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
 | 
			
		||||
OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 | 
			
		||||
ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
 | 
			
		||||
PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
US Government Users Restricted Rights
 | 
			
		||||
 | 
			
		||||
Use, duplication, or disclosure by the Government is subject to
 | 
			
		||||
restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 | 
			
		||||
(c)(1)(ii) of the Rights in Technical Data and Computer
 | 
			
		||||
Software clause at DFARS 252.227-7013 and/or in similar or
 | 
			
		||||
successor clauses in the FAR or the DOD or NASA FAR
 | 
			
		||||
Supplement.  Unpublished-- rights reserved under the copyright
 | 
			
		||||
laws of the United States.  Contractor/manufacturer is Silicon
 | 
			
		||||
Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
 | 
			
		||||
94039-7311.
 | 
			
		||||
 | 
			
		||||
OpenGL(TM) is a trademark of Silicon Graphics, Inc.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <GL/gl.h>
 | 
			
		||||
#include <GL/glu.h>
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
 | 
			
		||||
/* Some <math.h> files do not define M_PI... */
 | 
			
		||||
#ifndef M_PI
 | 
			
		||||
#define M_PI 3.14159265358979323846
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static GLUquadricObj *quadObj;
 | 
			
		||||
 | 
			
		||||
#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
initQuadObj(void)
 | 
			
		||||
{
 | 
			
		||||
  quadObj = gluNewQuadric();
 | 
			
		||||
/*  if (!quadObj)
 | 
			
		||||
    __glutFatalError("out of memory."); */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
  QUAD_OBJ_INIT();
 | 
			
		||||
  gluQuadricDrawStyle(quadObj, GLU_LINE);
 | 
			
		||||
  gluQuadricNormals(quadObj, GLU_SMOOTH);
 | 
			
		||||
  /* If we ever changed/used the texture or orientation state
 | 
			
		||||
     of quadObj, we'd need to change it to the defaults here
 | 
			
		||||
     with gluQuadricTexture and/or gluQuadricOrientation. */
 | 
			
		||||
  gluSphere(quadObj, radius, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
  QUAD_OBJ_INIT();
 | 
			
		||||
  gluQuadricDrawStyle(quadObj, GLU_FILL);
 | 
			
		||||
  gluQuadricNormals(quadObj, GLU_SMOOTH);
 | 
			
		||||
  /* If we ever changed/used the texture or orientation state
 | 
			
		||||
     of quadObj, we'd need to change it to the defaults here
 | 
			
		||||
     with gluQuadricTexture and/or gluQuadricOrientation. */
 | 
			
		||||
  gluSphere(quadObj, radius, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireCone(GLdouble base, GLdouble height,
 | 
			
		||||
  GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
  QUAD_OBJ_INIT();
 | 
			
		||||
  gluQuadricDrawStyle(quadObj, GLU_LINE);
 | 
			
		||||
  gluQuadricNormals(quadObj, GLU_SMOOTH);
 | 
			
		||||
  /* If we ever changed/used the texture or orientation state
 | 
			
		||||
     of quadObj, we'd need to change it to the defaults here
 | 
			
		||||
     with gluQuadricTexture and/or gluQuadricOrientation. */
 | 
			
		||||
  gluCylinder(quadObj, base, 0.0, height, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidCone(GLdouble base, GLdouble height,
 | 
			
		||||
  GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
  QUAD_OBJ_INIT();
 | 
			
		||||
  gluQuadricDrawStyle(quadObj, GLU_FILL);
 | 
			
		||||
  gluQuadricNormals(quadObj, GLU_SMOOTH);
 | 
			
		||||
  /* If we ever changed/used the texture or orientation state
 | 
			
		||||
     of quadObj, we'd need to change it to the defaults here
 | 
			
		||||
     with gluQuadricTexture and/or gluQuadricOrientation. */
 | 
			
		||||
  gluCylinder(quadObj, base, 0.0, height, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
drawBox(GLfloat size, GLenum type)
 | 
			
		||||
{
 | 
			
		||||
  static GLfloat n[6][3] =
 | 
			
		||||
  {
 | 
			
		||||
    {-1.0, 0.0, 0.0},
 | 
			
		||||
    {0.0, 1.0, 0.0},
 | 
			
		||||
    {1.0, 0.0, 0.0},
 | 
			
		||||
    {0.0, -1.0, 0.0},
 | 
			
		||||
    {0.0, 0.0, 1.0},
 | 
			
		||||
    {0.0, 0.0, -1.0}
 | 
			
		||||
  };
 | 
			
		||||
  static GLint faces[6][4] =
 | 
			
		||||
  {
 | 
			
		||||
    {0, 1, 2, 3},
 | 
			
		||||
    {3, 2, 6, 7},
 | 
			
		||||
    {7, 6, 5, 4},
 | 
			
		||||
    {4, 5, 1, 0},
 | 
			
		||||
    {5, 6, 2, 1},
 | 
			
		||||
    {7, 4, 0, 3}
 | 
			
		||||
  };
 | 
			
		||||
  GLfloat v[8][3];
 | 
			
		||||
  GLint i;
 | 
			
		||||
 | 
			
		||||
  v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;
 | 
			
		||||
  v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;
 | 
			
		||||
  v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;
 | 
			
		||||
  v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;
 | 
			
		||||
  v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;
 | 
			
		||||
  v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;
 | 
			
		||||
 | 
			
		||||
  for (i = 5; i >= 0; i--) {
 | 
			
		||||
    glBegin(type);
 | 
			
		||||
    glNormal3fv(&n[i][0]);
 | 
			
		||||
    glVertex3fv(&v[faces[i][0]][0]);
 | 
			
		||||
    glVertex3fv(&v[faces[i][1]][0]);
 | 
			
		||||
    glVertex3fv(&v[faces[i][2]][0]);
 | 
			
		||||
    glVertex3fv(&v[faces[i][3]][0]);
 | 
			
		||||
    glEnd();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireCube(GLdouble size)
 | 
			
		||||
{
 | 
			
		||||
  drawBox(size, GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidCube(GLdouble size)
 | 
			
		||||
{
 | 
			
		||||
  drawBox(size, GL_QUADS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
 | 
			
		||||
{
 | 
			
		||||
  int i, j;
 | 
			
		||||
  GLfloat theta, phi, theta1;
 | 
			
		||||
  GLfloat cosTheta, sinTheta;
 | 
			
		||||
  GLfloat cosTheta1, sinTheta1;
 | 
			
		||||
  GLfloat ringDelta, sideDelta;
 | 
			
		||||
 | 
			
		||||
  ringDelta = 2.0 * M_PI / rings;
 | 
			
		||||
  sideDelta = 2.0 * M_PI / nsides;
 | 
			
		||||
 | 
			
		||||
  theta = 0.0;
 | 
			
		||||
  cosTheta = 1.0;
 | 
			
		||||
  sinTheta = 0.0;
 | 
			
		||||
  for (i = rings - 1; i >= 0; i--) {
 | 
			
		||||
    theta1 = theta + ringDelta;
 | 
			
		||||
    cosTheta1 = cos(theta1);
 | 
			
		||||
    sinTheta1 = sin(theta1);
 | 
			
		||||
    glBegin(GL_QUAD_STRIP);
 | 
			
		||||
    phi = 0.0;
 | 
			
		||||
    for (j = nsides; j >= 0; j--) {
 | 
			
		||||
      GLfloat cosPhi, sinPhi, dist;
 | 
			
		||||
 | 
			
		||||
      phi += sideDelta;
 | 
			
		||||
      cosPhi = cos(phi);
 | 
			
		||||
      sinPhi = sin(phi);
 | 
			
		||||
      dist = R + r * cosPhi;
 | 
			
		||||
 | 
			
		||||
      glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
 | 
			
		||||
      glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
 | 
			
		||||
      glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
 | 
			
		||||
      glVertex3f(cosTheta * dist, -sinTheta * dist,  r * sinPhi);
 | 
			
		||||
    }
 | 
			
		||||
    glEnd();
 | 
			
		||||
    theta = theta1;
 | 
			
		||||
    cosTheta = cosTheta1;
 | 
			
		||||
    sinTheta = sinTheta1;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
 | 
			
		||||
  GLint nsides, GLint rings)
 | 
			
		||||
{
 | 
			
		||||
  glPushAttrib(GL_POLYGON_BIT);
 | 
			
		||||
  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 | 
			
		||||
  doughnut(innerRadius, outerRadius, nsides, rings);
 | 
			
		||||
  glPopAttrib();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
 | 
			
		||||
  GLint nsides, GLint rings)
 | 
			
		||||
{
 | 
			
		||||
  doughnut(innerRadius, outerRadius, nsides, rings);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
 | 
			
		||||
static GLfloat dodec[20][3];
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
initDodecahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  GLfloat alpha, beta;
 | 
			
		||||
 | 
			
		||||
  alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));
 | 
			
		||||
  beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -
 | 
			
		||||
    2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));
 | 
			
		||||
  /* *INDENT-OFF* */
 | 
			
		||||
  dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
 | 
			
		||||
  dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
 | 
			
		||||
  dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
 | 
			
		||||
  dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
 | 
			
		||||
  dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
 | 
			
		||||
  dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
 | 
			
		||||
  dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
 | 
			
		||||
  dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
 | 
			
		||||
  dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
 | 
			
		||||
  dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
 | 
			
		||||
  dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
 | 
			
		||||
  dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
 | 
			
		||||
  dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
 | 
			
		||||
  dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
 | 
			
		||||
  dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
 | 
			
		||||
  dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
 | 
			
		||||
  dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
 | 
			
		||||
  dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
 | 
			
		||||
  dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
 | 
			
		||||
  dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
 | 
			
		||||
  /* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define DIFF3(_a,_b,_c) { \
 | 
			
		||||
    (_c)[0] = (_a)[0] - (_b)[0]; \
 | 
			
		||||
    (_c)[1] = (_a)[1] - (_b)[1]; \
 | 
			
		||||
    (_c)[2] = (_a)[2] - (_b)[2]; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])
 | 
			
		||||
{
 | 
			
		||||
  GLfloat p[3];         /* in case prod == v1 or v2 */
 | 
			
		||||
 | 
			
		||||
  p[0] = v1[1] * v2[2] - v2[1] * v1[2];
 | 
			
		||||
  p[1] = v1[2] * v2[0] - v2[2] * v1[0];
 | 
			
		||||
  p[2] = v1[0] * v2[1] - v2[0] * v1[1];
 | 
			
		||||
  prod[0] = p[0];
 | 
			
		||||
  prod[1] = p[1];
 | 
			
		||||
  prod[2] = p[2];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
normalize(GLfloat v[3])
 | 
			
		||||
{
 | 
			
		||||
  GLfloat d;
 | 
			
		||||
 | 
			
		||||
  d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
 | 
			
		||||
  if (d == 0.0) {
 | 
			
		||||
//    __glutWarning("normalize: zero length vector");
 | 
			
		||||
    v[0] = d = 1.0;
 | 
			
		||||
  }
 | 
			
		||||
  d = 1 / d;
 | 
			
		||||
  v[0] *= d;
 | 
			
		||||
  v[1] *= d;
 | 
			
		||||
  v[2] *= d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
pentagon(int a, int b, int c, int d, int e, GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  GLfloat n0[3], d1[3], d2[3];
 | 
			
		||||
 | 
			
		||||
  DIFF3(dodec[a], dodec[b], d1);
 | 
			
		||||
  DIFF3(dodec[b], dodec[c], d2);
 | 
			
		||||
  crossprod(d1, d2, n0);
 | 
			
		||||
  normalize(n0);
 | 
			
		||||
 | 
			
		||||
  glBegin(shadeType);
 | 
			
		||||
  glNormal3fv(n0);
 | 
			
		||||
  glVertex3fv(&dodec[a][0]);
 | 
			
		||||
  glVertex3fv(&dodec[b][0]);
 | 
			
		||||
  glVertex3fv(&dodec[c][0]);
 | 
			
		||||
  glVertex3fv(&dodec[d][0]);
 | 
			
		||||
  glVertex3fv(&dodec[e][0]);
 | 
			
		||||
  glEnd();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
dodecahedron(GLenum type)
 | 
			
		||||
{
 | 
			
		||||
  static int inited = 0;
 | 
			
		||||
 | 
			
		||||
  if (inited == 0) {
 | 
			
		||||
    inited = 1;
 | 
			
		||||
    initDodecahedron();
 | 
			
		||||
  }
 | 
			
		||||
  pentagon(0, 1, 9, 16, 5, type);
 | 
			
		||||
  pentagon(1, 0, 3, 18, 7, type);
 | 
			
		||||
  pentagon(1, 7, 11, 10, 9, type);
 | 
			
		||||
  pentagon(11, 7, 18, 19, 6, type);
 | 
			
		||||
  pentagon(8, 17, 16, 9, 10, type);
 | 
			
		||||
  pentagon(2, 14, 15, 6, 19, type);
 | 
			
		||||
  pentagon(2, 13, 12, 4, 14, type);
 | 
			
		||||
  pentagon(2, 19, 18, 3, 13, type);
 | 
			
		||||
  pentagon(3, 0, 5, 12, 13, type);
 | 
			
		||||
  pentagon(6, 15, 8, 10, 11, type);
 | 
			
		||||
  pentagon(4, 17, 8, 15, 14, type);
 | 
			
		||||
  pentagon(4, 12, 5, 16, 17, type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireDodecahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  dodecahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidDodecahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  dodecahedron(GL_TRIANGLE_FAN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,
 | 
			
		||||
  GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  GLfloat q0[3], q1[3];
 | 
			
		||||
 | 
			
		||||
  DIFF3(n1, n2, q0);
 | 
			
		||||
  DIFF3(n2, n3, q1);
 | 
			
		||||
  crossprod(q0, q1, q1);
 | 
			
		||||
  normalize(q1);
 | 
			
		||||
 | 
			
		||||
  glBegin(shadeType);
 | 
			
		||||
  glNormal3fv(q1);
 | 
			
		||||
  glVertex3fv(n1);
 | 
			
		||||
  glVertex3fv(n2);
 | 
			
		||||
  glVertex3fv(n3);
 | 
			
		||||
  glEnd();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,
 | 
			
		||||
  GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  int depth;
 | 
			
		||||
  GLfloat w0[3], w1[3], w2[3];
 | 
			
		||||
  GLfloat l;
 | 
			
		||||
  int i, j, k, n;
 | 
			
		||||
 | 
			
		||||
  depth = 1;
 | 
			
		||||
  for (i = 0; i < depth; i++) {
 | 
			
		||||
    for (j = 0; i + j < depth; j++) {
 | 
			
		||||
      k = depth - i - j;
 | 
			
		||||
      for (n = 0; n < 3; n++) {
 | 
			
		||||
        w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
 | 
			
		||||
        w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
 | 
			
		||||
          / depth;
 | 
			
		||||
        w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
 | 
			
		||||
          / depth;
 | 
			
		||||
      }
 | 
			
		||||
      l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
 | 
			
		||||
      w0[0] /= l;
 | 
			
		||||
      w0[1] /= l;
 | 
			
		||||
      w0[2] /= l;
 | 
			
		||||
      l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
 | 
			
		||||
      w1[0] /= l;
 | 
			
		||||
      w1[1] /= l;
 | 
			
		||||
      w1[2] /= l;
 | 
			
		||||
      l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
 | 
			
		||||
      w2[0] /= l;
 | 
			
		||||
      w2[1] /= l;
 | 
			
		||||
      w2[2] /= l;
 | 
			
		||||
      recorditem(w1, w0, w2, shadeType);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
drawtriangle(int i, GLfloat data[][3], int ndx[][3],
 | 
			
		||||
  GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  GLfloat *x0, *x1, *x2;
 | 
			
		||||
 | 
			
		||||
  x0 = data[ndx[i][0]];
 | 
			
		||||
  x1 = data[ndx[i][1]];
 | 
			
		||||
  x2 = data[ndx[i][2]];
 | 
			
		||||
  subdivide(x0, x1, x2, shadeType);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* octahedron data: The octahedron produced is centered at the
 | 
			
		||||
   origin and has radius 1.0 */
 | 
			
		||||
static GLfloat odata[6][3] =
 | 
			
		||||
{
 | 
			
		||||
  {1.0, 0.0, 0.0},
 | 
			
		||||
  {-1.0, 0.0, 0.0},
 | 
			
		||||
  {0.0, 1.0, 0.0},
 | 
			
		||||
  {0.0, -1.0, 0.0},
 | 
			
		||||
  {0.0, 0.0, 1.0},
 | 
			
		||||
  {0.0, 0.0, -1.0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int ondex[8][3] =
 | 
			
		||||
{
 | 
			
		||||
  {0, 4, 2},
 | 
			
		||||
  {1, 2, 4},
 | 
			
		||||
  {0, 3, 4},
 | 
			
		||||
  {1, 4, 3},
 | 
			
		||||
  {0, 2, 5},
 | 
			
		||||
  {1, 5, 2},
 | 
			
		||||
  {0, 5, 3},
 | 
			
		||||
  {1, 3, 5}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
octahedron(GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 7; i >= 0; i--) {
 | 
			
		||||
    drawtriangle(i, odata, ondex, shadeType);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireOctahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  octahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidOctahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  octahedron(GL_TRIANGLES);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
 | 
			
		||||
/* icosahedron data: These numbers are rigged to make an
 | 
			
		||||
   icosahedron of radius 1.0 */
 | 
			
		||||
 | 
			
		||||
#define X .525731112119133606
 | 
			
		||||
#define Z .850650808352039932
 | 
			
		||||
 | 
			
		||||
static GLfloat idata[12][3] =
 | 
			
		||||
{
 | 
			
		||||
  {-X, 0, Z},
 | 
			
		||||
  {X, 0, Z},
 | 
			
		||||
  {-X, 0, -Z},
 | 
			
		||||
  {X, 0, -Z},
 | 
			
		||||
  {0, Z, X},
 | 
			
		||||
  {0, Z, -X},
 | 
			
		||||
  {0, -Z, X},
 | 
			
		||||
  {0, -Z, -X},
 | 
			
		||||
  {Z, X, 0},
 | 
			
		||||
  {-Z, X, 0},
 | 
			
		||||
  {Z, -X, 0},
 | 
			
		||||
  {-Z, -X, 0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int index[20][3] =
 | 
			
		||||
{
 | 
			
		||||
  {0, 4, 1},
 | 
			
		||||
  {0, 9, 4},
 | 
			
		||||
  {9, 5, 4},
 | 
			
		||||
  {4, 5, 8},
 | 
			
		||||
  {4, 8, 1},
 | 
			
		||||
  {8, 10, 1},
 | 
			
		||||
  {8, 3, 10},
 | 
			
		||||
  {5, 3, 8},
 | 
			
		||||
  {5, 2, 3},
 | 
			
		||||
  {2, 7, 3},
 | 
			
		||||
  {7, 10, 3},
 | 
			
		||||
  {7, 6, 10},
 | 
			
		||||
  {7, 11, 6},
 | 
			
		||||
  {11, 0, 6},
 | 
			
		||||
  {0, 1, 6},
 | 
			
		||||
  {6, 1, 10},
 | 
			
		||||
  {9, 0, 11},
 | 
			
		||||
  {9, 11, 2},
 | 
			
		||||
  {9, 2, 5},
 | 
			
		||||
  {7, 2, 11},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
icosahedron(GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 19; i >= 0; i--) {
 | 
			
		||||
    drawtriangle(i, idata, index, shadeType);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireIcosahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  icosahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidIcosahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  icosahedron(GL_TRIANGLES);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
 | 
			
		||||
/* tetrahedron data: */
 | 
			
		||||
 | 
			
		||||
#define T       1.73205080756887729
 | 
			
		||||
 | 
			
		||||
static GLfloat tdata[4][3] =
 | 
			
		||||
{
 | 
			
		||||
  {T, T, T},
 | 
			
		||||
  {T, -T, -T},
 | 
			
		||||
  {-T, T, -T},
 | 
			
		||||
  {-T, -T, T}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int tndex[4][3] =
 | 
			
		||||
{
 | 
			
		||||
  {0, 1, 3},
 | 
			
		||||
  {2, 1, 0},
 | 
			
		||||
  {3, 2, 0},
 | 
			
		||||
  {1, 2, 3}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
tetrahedron(GLenum shadeType)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 3; i >= 0; i--)
 | 
			
		||||
    drawtriangle(i, tdata, tndex, shadeType);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutWireTetrahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  tetrahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
glutSolidTetrahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  tetrahedron(GL_TRIANGLES);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
							
								
								
									
										60
									
								
								src/glut/dos/mouse.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src/glut/dos/mouse.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  3.4
 | 
			
		||||
 * Copyright (C) 1995-1998  Brian Paul
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Library General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Library General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Library General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free
 | 
			
		||||
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int g_mouse;
 | 
			
		||||
int g_mouse_x = 0, g_mouse_y = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void __glutInitMouse (void)
 | 
			
		||||
{
 | 
			
		||||
 if ((g_mouse = pc_install_mouse())) {
 | 
			
		||||
    pc_mouse_area(g_curwin->xpos, g_curwin->ypos, g_curwin->xpos + g_curwin->width - 1, g_curwin->ypos + g_curwin->height - 1);
 | 
			
		||||
 | 
			
		||||
    g_curwin->show_mouse = (g_curwin->mouse || g_curwin->motion || g_curwin->passive);
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSetCursor (int cursor)
 | 
			
		||||
{
 | 
			
		||||
 /* XXX completely futile until full mouse support (maybe never) */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutWarpPointer (int x, int y)
 | 
			
		||||
{
 | 
			
		||||
 pc_warp_mouse(x, y);
 | 
			
		||||
}
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,7 +27,33 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutLayerGet (GLenum info)
 | 
			
		||||
{
 | 
			
		||||
 switch (info) {
 | 
			
		||||
        case GLUT_OVERLAY_POSSIBLE:
 | 
			
		||||
        case GLUT_HAS_OVERLAY:
 | 
			
		||||
             return GL_FALSE;
 | 
			
		||||
        case GLUT_LAYER_IN_USE:
 | 
			
		||||
             return GLUT_NORMAL;
 | 
			
		||||
        case GLUT_NORMAL_DAMAGED:
 | 
			
		||||
             return GL_FALSE;
 | 
			
		||||
        case GLUT_OVERLAY_DAMAGED:
 | 
			
		||||
        case GLUT_TRANSPARENT_INDEX:
 | 
			
		||||
        default:
 | 
			
		||||
             return -1;
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutOverlayDisplayFunc (GLUTdisplayCB func)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutEstablishOverlay (void)
 | 
			
		||||
@@ -35,26 +61,31 @@ void APIENTRY glutEstablishOverlay (void)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutRemoveOverlay (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutUseLayer (GLenum layer)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPostOverlayRedisplay (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutShowOverlay (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutHideOverlay (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.0 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,16 +27,19 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define FREQUENCY 100
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int timer_installed;
 | 
			
		||||
static volatile int ticks;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void ticks_timer (void *p)
 | 
			
		||||
{
 | 
			
		||||
 (void)p;
 | 
			
		||||
@@ -48,23 +51,92 @@ static void ticks_timer (void *p)
 | 
			
		||||
int APIENTRY glutGet (GLenum type)
 | 
			
		||||
{
 | 
			
		||||
 switch (type) {
 | 
			
		||||
        case GLUT_WINDOW_X:
 | 
			
		||||
             return g_curwin->xpos;
 | 
			
		||||
        case GLUT_WINDOW_Y:
 | 
			
		||||
             return g_curwin->ypos;
 | 
			
		||||
        case GLUT_WINDOW_WIDTH:
 | 
			
		||||
             return g_curwin->width;
 | 
			
		||||
        case GLUT_WINDOW_HEIGHT:
 | 
			
		||||
             return g_curwin->height;
 | 
			
		||||
        case GLUT_WINDOW_STENCIL_SIZE:
 | 
			
		||||
             return STENCIL_SIZE;
 | 
			
		||||
        case GLUT_WINDOW_DEPTH_SIZE:
 | 
			
		||||
             return DEPTH_SIZE;
 | 
			
		||||
        case GLUT_WINDOW_RGBA:
 | 
			
		||||
             return 1;
 | 
			
		||||
             return !(g_display_mode & GLUT_INDEX);
 | 
			
		||||
        case GLUT_WINDOW_COLORMAP_SIZE:
 | 
			
		||||
             return (g_display_mode & GLUT_INDEX) ? (256 - RESERVED_COLORS) : 0;
 | 
			
		||||
        case GLUT_SCREEN_WIDTH:
 | 
			
		||||
             return g_screen_w;
 | 
			
		||||
        case GLUT_SCREEN_HEIGHT:
 | 
			
		||||
             return g_screen_h;
 | 
			
		||||
        case GLUT_INIT_WINDOW_X:
 | 
			
		||||
             return g_init_x;
 | 
			
		||||
        case GLUT_INIT_WINDOW_Y:
 | 
			
		||||
             return g_init_y;
 | 
			
		||||
        case GLUT_INIT_WINDOW_WIDTH:
 | 
			
		||||
             return g_init_w;
 | 
			
		||||
        case GLUT_INIT_WINDOW_HEIGHT:
 | 
			
		||||
             return g_init_h;
 | 
			
		||||
        case GLUT_INIT_DISPLAY_MODE:
 | 
			
		||||
             return g_display_mode;
 | 
			
		||||
        case GLUT_ELAPSED_TIME:
 | 
			
		||||
             if (!timer_installed) {
 | 
			
		||||
                timer_installed = !timer_installed;
 | 
			
		||||
                timer_installed = GL_TRUE;
 | 
			
		||||
                LOCKDATA(ticks);
 | 
			
		||||
                LOCKFUNC(ticks_timer);
 | 
			
		||||
                pc_install_int(ticks_timer, NULL, FREQUENCY);
 | 
			
		||||
             }
 | 
			
		||||
             return ticks*1000/FREQUENCY;
 | 
			
		||||
        default:
 | 
			
		||||
             return 0;
 | 
			
		||||
             return -1;
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutDeviceGet (GLenum type)
 | 
			
		||||
{
 | 
			
		||||
 return 0;
 | 
			
		||||
 switch (type) {
 | 
			
		||||
        case GLUT_HAS_KEYBOARD:
 | 
			
		||||
             return GL_TRUE;
 | 
			
		||||
        case GLUT_HAS_MOUSE:
 | 
			
		||||
             return (g_mouse != 0);
 | 
			
		||||
        case GLUT_NUM_MOUSE_BUTTONS:
 | 
			
		||||
             return g_mouse;
 | 
			
		||||
        case GLUT_HAS_SPACEBALL:
 | 
			
		||||
        case GLUT_HAS_DIAL_AND_BUTTON_BOX:
 | 
			
		||||
        case GLUT_HAS_TABLET:
 | 
			
		||||
             return GL_FALSE;
 | 
			
		||||
        case GLUT_NUM_SPACEBALL_BUTTONS:
 | 
			
		||||
        case GLUT_NUM_BUTTON_BOX_BUTTONS:
 | 
			
		||||
        case GLUT_NUM_DIALS:
 | 
			
		||||
        case GLUT_NUM_TABLET_BUTTONS:
 | 
			
		||||
             return 0;
 | 
			
		||||
        default:
 | 
			
		||||
             return -1;
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutGetModifiers (void)
 | 
			
		||||
{
 | 
			
		||||
 int mod = 0;
 | 
			
		||||
 int shifts = pc_keyshifts();
 | 
			
		||||
 | 
			
		||||
 if (shifts & (KB_SHIFT_FLAG | KB_CAPSLOCK_FLAG)) {
 | 
			
		||||
    mod |= GLUT_ACTIVE_SHIFT;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (shifts & KB_ALT_FLAG) {
 | 
			
		||||
    mod |= GLUT_ACTIVE_ALT;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (shifts & KB_CTRL_FLAG) {
 | 
			
		||||
    mod |= GLUT_ACTIVE_CTRL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return mod;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,212 +0,0 @@
 | 
			
		||||
 | 
			
		||||
/* Copyright (c) Mark J. Kilgard, 1994. */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
(c) Copyright 1993, Silicon Graphics, Inc.
 | 
			
		||||
 | 
			
		||||
ALL RIGHTS RESERVED
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and distribute this software
 | 
			
		||||
for any purpose and without fee is hereby granted, provided
 | 
			
		||||
that the above copyright notice appear in all copies and that
 | 
			
		||||
both the copyright notice and this permission notice appear in
 | 
			
		||||
supporting documentation, and that the name of Silicon
 | 
			
		||||
Graphics, Inc. not be used in advertising or publicity
 | 
			
		||||
pertaining to distribution of the software without specific,
 | 
			
		||||
written prior permission.
 | 
			
		||||
 | 
			
		||||
THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
 | 
			
		||||
"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
 | 
			
		||||
OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
 | 
			
		||||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
 | 
			
		||||
EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
 | 
			
		||||
ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
 | 
			
		||||
CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
 | 
			
		||||
INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
 | 
			
		||||
SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
 | 
			
		||||
NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
 | 
			
		||||
OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 | 
			
		||||
ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
 | 
			
		||||
PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
US Government Users Restricted Rights
 | 
			
		||||
 | 
			
		||||
Use, duplication, or disclosure by the Government is subject to
 | 
			
		||||
restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 | 
			
		||||
(c)(1)(ii) of the Rights in Technical Data and Computer
 | 
			
		||||
Software clause at DFARS 252.227-7013 and/or in similar or
 | 
			
		||||
successor clauses in the FAR or the DOD or NASA FAR
 | 
			
		||||
Supplement.  Unpublished-- rights reserved under the copyright
 | 
			
		||||
laws of the United States.  Contractor/manufacturer is Silicon
 | 
			
		||||
Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
 | 
			
		||||
94039-7311.
 | 
			
		||||
 | 
			
		||||
OpenGL(TM) is a trademark of Silicon Graphics, Inc.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <GL/gl.h>
 | 
			
		||||
#include <GL/glu.h>
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
 | 
			
		||||
/* Rim, body, lid, and bottom data must be reflected in x and
 | 
			
		||||
   y; handle and spout data across the y axis only.  */
 | 
			
		||||
 | 
			
		||||
static int patchdata[][16] =
 | 
			
		||||
{
 | 
			
		||||
    /* rim */
 | 
			
		||||
  {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
 | 
			
		||||
    12, 13, 14, 15},
 | 
			
		||||
    /* body */
 | 
			
		||||
  {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
 | 
			
		||||
    24, 25, 26, 27},
 | 
			
		||||
  {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
 | 
			
		||||
    37, 38, 39, 40},
 | 
			
		||||
    /* lid */
 | 
			
		||||
  {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
 | 
			
		||||
    101, 0, 1, 2, 3,},
 | 
			
		||||
  {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
 | 
			
		||||
    113, 114, 115, 116, 117},
 | 
			
		||||
    /* bottom */
 | 
			
		||||
  {118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
 | 
			
		||||
    125, 120, 40, 39, 38, 37},
 | 
			
		||||
    /* handle */
 | 
			
		||||
  {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
 | 
			
		||||
    53, 54, 55, 56},
 | 
			
		||||
  {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
 | 
			
		||||
    28, 65, 66, 67},
 | 
			
		||||
    /* spout */
 | 
			
		||||
  {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
 | 
			
		||||
    80, 81, 82, 83},
 | 
			
		||||
  {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
 | 
			
		||||
    92, 93, 94, 95}
 | 
			
		||||
};
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
 | 
			
		||||
static float cpdata[][3] =
 | 
			
		||||
{
 | 
			
		||||
    {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,
 | 
			
		||||
    -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},
 | 
			
		||||
    {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,
 | 
			
		||||
    0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,
 | 
			
		||||
    2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,
 | 
			
		||||
    2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},
 | 
			
		||||
    {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,
 | 
			
		||||
    1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},
 | 
			
		||||
    {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,
 | 
			
		||||
    0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,
 | 
			
		||||
    0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},
 | 
			
		||||
    {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},
 | 
			
		||||
    {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,
 | 
			
		||||
    -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,
 | 
			
		||||
    -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,
 | 
			
		||||
    2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,
 | 
			
		||||
    2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,
 | 
			
		||||
    2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},
 | 
			
		||||
    {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,
 | 
			
		||||
    -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,
 | 
			
		||||
    1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,
 | 
			
		||||
    -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,
 | 
			
		||||
    1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,
 | 
			
		||||
    0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,
 | 
			
		||||
    0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},
 | 
			
		||||
    {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,
 | 
			
		||||
    -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,
 | 
			
		||||
    2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},
 | 
			
		||||
    {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},
 | 
			
		||||
    {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},
 | 
			
		||||
    {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,
 | 
			
		||||
    3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,
 | 
			
		||||
    3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,
 | 
			
		||||
    -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,
 | 
			
		||||
    2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,
 | 
			
		||||
    2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,
 | 
			
		||||
    2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},
 | 
			
		||||
    {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,
 | 
			
		||||
    -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,
 | 
			
		||||
    0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},
 | 
			
		||||
    {0.84, -1.5, 0.075}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static float tex[2][2][2] =
 | 
			
		||||
{
 | 
			
		||||
  { {0, 0},
 | 
			
		||||
    {1, 0}},
 | 
			
		||||
  { {0, 1},
 | 
			
		||||
    {1, 1}}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
teapot(GLint grid, GLdouble scale, GLenum type)
 | 
			
		||||
{
 | 
			
		||||
  float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
 | 
			
		||||
  long i, j, k, l;
 | 
			
		||||
 | 
			
		||||
  glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT);
 | 
			
		||||
  glEnable(GL_AUTO_NORMAL);
 | 
			
		||||
  glEnable(GL_NORMALIZE);
 | 
			
		||||
  glEnable(GL_MAP2_VERTEX_3);
 | 
			
		||||
  glEnable(GL_MAP2_TEXTURE_COORD_2);
 | 
			
		||||
  glPushMatrix();
 | 
			
		||||
  glRotatef(270.0, 1.0, 0.0, 0.0);
 | 
			
		||||
  glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
 | 
			
		||||
  glTranslatef(0.0, 0.0, -1.5);
 | 
			
		||||
  for (i = 0; i < 10; i++) {
 | 
			
		||||
    for (j = 0; j < 4; j++) {
 | 
			
		||||
      for (k = 0; k < 4; k++) {
 | 
			
		||||
        for (l = 0; l < 3; l++) {
 | 
			
		||||
          p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
 | 
			
		||||
          q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];
 | 
			
		||||
          if (l == 1)
 | 
			
		||||
            q[j][k][l] *= -1.0;
 | 
			
		||||
          if (i < 6) {
 | 
			
		||||
            r[j][k][l] =
 | 
			
		||||
              cpdata[patchdata[i][j * 4 + (3 - k)]][l];
 | 
			
		||||
            if (l == 0)
 | 
			
		||||
              r[j][k][l] *= -1.0;
 | 
			
		||||
            s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
 | 
			
		||||
            if (l == 0)
 | 
			
		||||
              s[j][k][l] *= -1.0;
 | 
			
		||||
            if (l == 1)
 | 
			
		||||
              s[j][k][l] *= -1.0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
 | 
			
		||||
      &tex[0][0][0]);
 | 
			
		||||
    glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
 | 
			
		||||
      &p[0][0][0]);
 | 
			
		||||
    glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
 | 
			
		||||
    glEvalMesh2(type, 0, grid, 0, grid);
 | 
			
		||||
    glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
 | 
			
		||||
      &q[0][0][0]);
 | 
			
		||||
    glEvalMesh2(type, 0, grid, 0, grid);
 | 
			
		||||
    if (i < 6) {
 | 
			
		||||
      glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
 | 
			
		||||
        &r[0][0][0]);
 | 
			
		||||
      glEvalMesh2(type, 0, grid, 0, grid);
 | 
			
		||||
      glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
 | 
			
		||||
        &s[0][0][0]);
 | 
			
		||||
      glEvalMesh2(type, 0, grid, 0, grid);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  glPopMatrix();
 | 
			
		||||
  glPopAttrib();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
glutSolidTeapot(GLdouble scale)
 | 
			
		||||
{
 | 
			
		||||
  teapot(7, scale, GL_FILL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
glutWireTeapot(GLdouble scale)
 | 
			
		||||
{
 | 
			
		||||
  teapot(10, scale, GL_LINE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ENDCENTRY */
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP glut driver v1.2 for Mesa 4.1
 | 
			
		||||
 * DOS/DJGPP glut driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -27,27 +27,19 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "GL/glut.h"
 | 
			
		||||
#ifndef FX
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
#include "GL/dmesa.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "GL/fxmesa.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int window;
 | 
			
		||||
GLUTwindow *g_curwin;
 | 
			
		||||
static GLuint swaptime, swapcount;
 | 
			
		||||
 | 
			
		||||
#ifndef FX
 | 
			
		||||
static DMesaVisual  visual  = NULL;
 | 
			
		||||
static DMesaContext context = NULL;
 | 
			
		||||
static DMesaBuffer  buffer[MAX_WINDOWS];
 | 
			
		||||
#else
 | 
			
		||||
static void *visual = NULL;
 | 
			
		||||
static fxMesaContext context = NULL;
 | 
			
		||||
static int fx_attrib[32];
 | 
			
		||||
#endif
 | 
			
		||||
static GLUTwindow *windows[MAX_WINDOWS];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -55,15 +47,11 @@ static void clean (void)
 | 
			
		||||
{
 | 
			
		||||
 int i;
 | 
			
		||||
 | 
			
		||||
 for (i=0; i<MAX_WINDOWS; i++) {
 | 
			
		||||
     glutDestroyWindow(i+1);
 | 
			
		||||
 for (i=1; i<=MAX_WINDOWS; i++) {
 | 
			
		||||
     glutDestroyWindow(i);
 | 
			
		||||
 }
 | 
			
		||||
#ifndef FX
 | 
			
		||||
 if (context) DMesaDestroyContext(context);
 | 
			
		||||
 if (visual)  DMesaDestroyVisual(visual);
 | 
			
		||||
#else
 | 
			
		||||
 if (context) fxMesaDestroyContext(context);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 pc_close_stdout();
 | 
			
		||||
 pc_close_stderr();
 | 
			
		||||
@@ -74,187 +62,199 @@ static void clean (void)
 | 
			
		||||
int APIENTRY glutCreateWindow (const char *title)
 | 
			
		||||
{
 | 
			
		||||
 int i;
 | 
			
		||||
 int m8width = (g_init_w + 7) & ~7;
 | 
			
		||||
 | 
			
		||||
 if (!visual) {
 | 
			
		||||
    int screen_w = DEFAULT_WIDTH;
 | 
			
		||||
    int screen_h = DEFAULT_HEIGHT;
 | 
			
		||||
 | 
			
		||||
    if ((g_width<=640) && (g_height<=480)) {
 | 
			
		||||
       screen_w = 640;
 | 
			
		||||
       screen_h = 480;
 | 
			
		||||
    } else if ((g_width<=800) && (g_height<=600)) {
 | 
			
		||||
       screen_w = 800;
 | 
			
		||||
       screen_h = 600;
 | 
			
		||||
    } else if ((g_width<=1024) && (g_height<=768)) {
 | 
			
		||||
       screen_w = 1024;
 | 
			
		||||
       screen_h = 768;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef FX
 | 
			
		||||
    if ((visual=DMesaCreateVisual(screen_w, screen_h, DEFAULT_BPP,
 | 
			
		||||
    if ((visual=DMesaCreateVisual(g_init_x + m8width, g_init_y + g_init_h, g_bpp, g_refresh,
 | 
			
		||||
                                  g_display_mode & GLUT_DOUBLE,
 | 
			
		||||
                                  !(g_display_mode & GLUT_INDEX),
 | 
			
		||||
                                  g_display_mode & GLUT_ALPHA,
 | 
			
		||||
                                  g_display_mode & GLUT_DEPTH  ?DEPTH_SIZE  :0,
 | 
			
		||||
                                  g_display_mode & GLUT_STENCIL?STENCIL_SIZE:0,
 | 
			
		||||
                                  g_display_mode & GLUT_ACCUM  ?ACCUM_SIZE  :0))==NULL) {
 | 
			
		||||
       return 0;
 | 
			
		||||
    }
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
    if ((context=DMesaCreateContext(visual, NULL))==NULL) {
 | 
			
		||||
       DMesaDestroyVisual(visual);
 | 
			
		||||
       return 0;
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    i = 0;
 | 
			
		||||
    if (g_display_mode & GLUT_DOUBLE) fx_attrib[i++] = FXMESA_DOUBLEBUFFER;
 | 
			
		||||
    if (g_display_mode & GLUT_DEPTH) { fx_attrib[i++] = FXMESA_DEPTH_SIZE; fx_attrib[i++] = DEPTH_SIZE; }
 | 
			
		||||
    if (g_display_mode & GLUT_STENCIL) { fx_attrib[i++] = FXMESA_STENCIL_SIZE; fx_attrib[i++] = STENCIL_SIZE; }
 | 
			
		||||
    if (g_display_mode & GLUT_ACCUM) { fx_attrib[i++] = FXMESA_ACCUM_SIZE; fx_attrib[i++] = ACCUM_SIZE; }
 | 
			
		||||
    fx_attrib[i] = FXMESA_NONE;
 | 
			
		||||
    if ((context=fxMesaCreateBestContext(-1, screen_w, screen_h, fx_attrib))==NULL) {
 | 
			
		||||
       return 0;
 | 
			
		||||
    }
 | 
			
		||||
    visual = context;
 | 
			
		||||
#endif
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    pc_open_stdout();
 | 
			
		||||
    pc_open_stderr();
 | 
			
		||||
    pc_atexit(clean);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
#ifndef FX
 | 
			
		||||
 for (i=0; i<MAX_WINDOWS; i++) {
 | 
			
		||||
     if (!buffer[i]) {
 | 
			
		||||
     if (windows[i] == NULL) {
 | 
			
		||||
        DMesaBuffer b;
 | 
			
		||||
     
 | 
			
		||||
        if ((b=DMesaCreateBuffer(visual, g_xpos, g_ypos, g_width, g_height))==NULL) {
 | 
			
		||||
        GLUTwindow *w;
 | 
			
		||||
 | 
			
		||||
        if ((w=(GLUTwindow *)calloc(1, sizeof(GLUTwindow))) == NULL) {
 | 
			
		||||
           return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ((b=DMesaCreateBuffer(visual, g_init_x, g_init_y, m8width, g_init_h))==NULL) {
 | 
			
		||||
           free(w);
 | 
			
		||||
           return 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (!DMesaMakeCurrent(context, b)) {
 | 
			
		||||
           DMesaDestroyBuffer(b);
 | 
			
		||||
           free(w);
 | 
			
		||||
           return 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (g_mouse) {
 | 
			
		||||
           pc_mouse_area(g_xpos, g_ypos, g_xpos + g_width - 1, g_ypos + g_height - 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        buffer[window = i] = b;
 | 
			
		||||
        return i+1;
 | 
			
		||||
        g_curwin = windows[i] = w;
 | 
			
		||||
 | 
			
		||||
        w->num = ++i;
 | 
			
		||||
        w->xpos = g_init_x;
 | 
			
		||||
        w->ypos = g_init_y;
 | 
			
		||||
        w->width = m8width;
 | 
			
		||||
        w->height = g_init_h;
 | 
			
		||||
        w->buffer = b;
 | 
			
		||||
 | 
			
		||||
        return i;
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return 0;
 | 
			
		||||
#else
 | 
			
		||||
 fxMesaMakeCurrent(context);
 | 
			
		||||
 | 
			
		||||
 return 1;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutCreateSubWindow (int win, int x, int y, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
 return GL_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutDestroyWindow (int win)
 | 
			
		||||
{
 | 
			
		||||
#ifndef FX
 | 
			
		||||
 if (buffer[win-1]) {
 | 
			
		||||
    DMesaDestroyBuffer(buffer[win-1]);
 | 
			
		||||
    buffer[win-1] = NULL;
 | 
			
		||||
 if (windows[--win]) {
 | 
			
		||||
    DMesaDestroyBuffer(windows[win]->buffer);
 | 
			
		||||
    free(windows[win]);
 | 
			
		||||
    windows[win] = NULL;
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPostRedisplay (void)
 | 
			
		||||
{
 | 
			
		||||
 g_redisplay = GL_TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSwapBuffers (void)
 | 
			
		||||
{
 | 
			
		||||
 if (g_mouse) pc_scare_mouse();
 | 
			
		||||
#ifndef FX
 | 
			
		||||
 DMesaSwapBuffers(buffer[window]);
 | 
			
		||||
#else
 | 
			
		||||
 fxMesaSwapBuffers();
 | 
			
		||||
#endif
 | 
			
		||||
 if (g_mouse) pc_unscare_mouse();
 | 
			
		||||
 if (g_curwin->show_mouse) {
 | 
			
		||||
    /* XXX scare mouse */
 | 
			
		||||
    DMesaSwapBuffers(g_curwin->buffer);
 | 
			
		||||
    /* XXX unscare mouse */
 | 
			
		||||
 } else {
 | 
			
		||||
    DMesaSwapBuffers(g_curwin->buffer);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (g_fps) {
 | 
			
		||||
    GLint t = glutGet(GLUT_ELAPSED_TIME);
 | 
			
		||||
    swapcount++;
 | 
			
		||||
    if (swaptime == 0)
 | 
			
		||||
       swaptime = t;
 | 
			
		||||
    else if (t - swaptime > g_fps) {
 | 
			
		||||
       double time = 0.001 * (t - swaptime);
 | 
			
		||||
       double fps = (double)swapcount / time;
 | 
			
		||||
       fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n", swapcount, time, fps);
 | 
			
		||||
       swaptime = t;
 | 
			
		||||
       swapcount = 0;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int APIENTRY glutGetWindow (void)
 | 
			
		||||
{
 | 
			
		||||
 return window + 1;
 | 
			
		||||
 return g_curwin->num;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSetWindow (int win)
 | 
			
		||||
{
 | 
			
		||||
 window = win - 1;
 | 
			
		||||
 g_curwin = windows[win - 1];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSetWindowTitle (const char *title)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutSetIconTitle (const char *title)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPositionWindow (int x, int y)
 | 
			
		||||
{
 | 
			
		||||
#ifndef FX
 | 
			
		||||
 if (DMesaViewport(buffer[window], x, y, g_width, g_height)) {
 | 
			
		||||
    g_xpos = x;
 | 
			
		||||
    g_ypos = y;
 | 
			
		||||
 if (DMesaMoveBuffer(x, y)) {
 | 
			
		||||
    g_curwin->xpos = x;
 | 
			
		||||
    g_curwin->ypos = y;
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutReshapeWindow (int width, int height)
 | 
			
		||||
{
 | 
			
		||||
#ifndef FX
 | 
			
		||||
 if (DMesaViewport(buffer[window], g_xpos, g_ypos, width, height)) {
 | 
			
		||||
    g_width = width;
 | 
			
		||||
    g_height = height;
 | 
			
		||||
    if (reshape_func) {
 | 
			
		||||
       reshape_func(width, height);
 | 
			
		||||
{ 
 | 
			
		||||
 if (DMesaResizeBuffer(width, height)) {
 | 
			
		||||
    g_curwin->width = width;
 | 
			
		||||
    g_curwin->height = height;
 | 
			
		||||
    if (g_curwin->reshape) {
 | 
			
		||||
       g_curwin->reshape(width, height);
 | 
			
		||||
    } else {
 | 
			
		||||
       glViewport(0, 0, width, height);
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutFullScreen (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPopWindow (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutPushWindow (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutIconifyWindow (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutShowWindow (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void APIENTRY glutHideWindow (void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -121,6 +121,11 @@ EXPORTS
 | 
			
		||||
	glutWireTeapot
 | 
			
		||||
	glutWireTetrahedron
 | 
			
		||||
	glutWireTorus
 | 
			
		||||
	glutStrokeRoman
 | 
			
		||||
	glutBitmap9By15
 | 
			
		||||
	glutBitmapHelvetica10
 | 
			
		||||
	glutBitmapHelvetica18
 | 
			
		||||
	glutBitmapTimesRoman24
 | 
			
		||||
;    __glutSetFCB
 | 
			
		||||
;    __glutGetFCB
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
#include "glutbitmap.h"
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutBitmapCharacter(GLUTbitmapFont font, int c)
 | 
			
		||||
{
 | 
			
		||||
  const BitmapCharRec *ch;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
#include "glutbitmap.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutBitmapWidth(GLUTbitmapFont font, int c)
 | 
			
		||||
{
 | 
			
		||||
  BitmapFontPtr fontinfo;
 | 
			
		||||
@@ -30,7 +30,7 @@ glutBitmapWidth(GLUTbitmapFont font, int c)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutBitmapLength(GLUTbitmapFont font, const unsigned char *string)
 | 
			
		||||
{
 | 
			
		||||
  int c, length;
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
#define CLAMP(i) ((i) > 1.0 ? 1.0 : ((i) < 0.0 ? 0.0 : (i)))
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSetColor(int ndx, GLfloat red, GLfloat green, GLfloat blue)
 | 
			
		||||
{
 | 
			
		||||
  GLUTcolormap *cmap, *newcmap;
 | 
			
		||||
@@ -126,7 +126,7 @@ glutSetColor(int ndx, GLfloat red, GLfloat green, GLfloat blue)
 | 
			
		||||
  XStoreColor(__glutDisplay, cmap->cmap, &color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GLfloat APIENTRY
 | 
			
		||||
GLfloat GLUTAPIENTRY
 | 
			
		||||
glutGetColor(int ndx, int comp)
 | 
			
		||||
{
 | 
			
		||||
  GLUTcolormap *colormap;
 | 
			
		||||
@@ -161,7 +161,7 @@ glutGetColor(int ndx, int comp)
 | 
			
		||||
  return colormap->cells[ndx].component[comp];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutCopyColormap(int winnum)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window = __glutWindowList[winnum - 1];
 | 
			
		||||
 
 | 
			
		||||
@@ -180,7 +180,7 @@ __glutSetCursor(GLUTwindow *window)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSetCursor(int cursor)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->buttonBox = buttonBoxFunc;
 | 
			
		||||
@@ -16,7 +16,7 @@ glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc)
 | 
			
		||||
    GLUT_DEVICE_MASK_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutDialsFunc(GLUTdialsCB dialsFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->dials = dialsFunc;
 | 
			
		||||
 
 | 
			
		||||
@@ -1478,7 +1478,7 @@ getVisualInfoFromString(char *string, Bool * treatAsSingle,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutInitDisplayString(const char *string)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
 
 | 
			
		||||
@@ -103,13 +103,13 @@ Atom __glutMotifHints = None;
 | 
			
		||||
unsigned int __glutModifierMask = (unsigned int) ~0;
 | 
			
		||||
int __glutWindowDamaged = 0;
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutIdleFunc(GLUTidleCB idleFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutIdleFunc = idleFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutTimerFunc(unsigned int interval, GLUTtimerCB timerFunc, int value)
 | 
			
		||||
{
 | 
			
		||||
  GLUTtimer *timer, *other;
 | 
			
		||||
@@ -215,7 +215,7 @@ __glutPostRedisplay(GLUTwindow * window, int layerMask)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutPostRedisplay(void)
 | 
			
		||||
{
 | 
			
		||||
  __glutPostRedisplay(__glutCurrentWindow, GLUT_REDISPLAY_WORK);
 | 
			
		||||
@@ -225,7 +225,7 @@ glutPostRedisplay(void)
 | 
			
		||||
   glutSetWindow call (entailing an expensive OpenGL context switch),
 | 
			
		||||
   particularly useful when multiple windows need redisplays posted at
 | 
			
		||||
   the same times.  See also glutPostWindowOverlayRedisplay. */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutPostWindowRedisplay(int win)
 | 
			
		||||
{
 | 
			
		||||
  __glutPostRedisplay(__glutWindowList[win - 1], GLUT_REDISPLAY_WORK);
 | 
			
		||||
@@ -1351,7 +1351,7 @@ __glutProcessWindowWorkLists(void)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutMainLoop(void)
 | 
			
		||||
{
 | 
			
		||||
#if !defined(_WIN32)
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutExtensionSupported(const char *extension)
 | 
			
		||||
{
 | 
			
		||||
  static const GLubyte *extensions = NULL;
 | 
			
		||||
@@ -177,7 +177,7 @@ static struct name_address_pair glut_functions[] = {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* XXX This isn't an official GLUT function, yet */
 | 
			
		||||
void * APIENTRY 
 | 
			
		||||
void * GLUTAPIENTRY 
 | 
			
		||||
glutGetProcAddress(const char *procName)
 | 
			
		||||
{
 | 
			
		||||
   /* Try GLUT functions first */
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
 | 
			
		||||
/* Set a Fortran callback function. */
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
__glutSetFCB(int which, void *func)
 | 
			
		||||
{
 | 
			
		||||
#ifdef SUPPORT_FORTRAN
 | 
			
		||||
@@ -100,7 +100,7 @@ __glutSetFCB(int which, void *func)
 | 
			
		||||
 | 
			
		||||
/* Get a Fortran callback function. */
 | 
			
		||||
 | 
			
		||||
void* APIENTRY
 | 
			
		||||
void* GLUTAPIENTRY
 | 
			
		||||
__glutGetFCB(int which)
 | 
			
		||||
{
 | 
			
		||||
#ifdef SUPPORT_FORTRAN
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutFullScreen(void)
 | 
			
		||||
{
 | 
			
		||||
  assert(!__glutCurrentWindow->parent);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ static char *capstr[] =
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void __cdecl
 | 
			
		||||
void
 | 
			
		||||
__glutCloseDownGameMode(void)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutDisplaySettingsChanged) {
 | 
			
		||||
@@ -59,7 +59,7 @@ __glutCloseDownGameMode(void)
 | 
			
		||||
  __glutGameModeWindow = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutLeaveGameMode(void)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutGameModeWindow == NULL) {
 | 
			
		||||
@@ -548,7 +548,7 @@ parseDisplayString(const char *display, int *ncriteria)
 | 
			
		||||
  return criteria;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutGameModeString(const char *string)
 | 
			
		||||
{
 | 
			
		||||
  Criterion *criteria;
 | 
			
		||||
@@ -560,7 +560,7 @@ glutGameModeString(const char *string)
 | 
			
		||||
  free(criteria);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutEnterGameMode(void)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window;
 | 
			
		||||
@@ -654,7 +654,7 @@ glutEnterGameMode(void)
 | 
			
		||||
  return window->num + 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutGameModeGet(GLenum mode)
 | 
			
		||||
{
 | 
			
		||||
  switch (mode) {
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutGet(GLenum param)
 | 
			
		||||
{
 | 
			
		||||
  Window win, root;
 | 
			
		||||
 
 | 
			
		||||
@@ -186,7 +186,7 @@ removeArgs(int *argcp, char **argv, int numToRemove)
 | 
			
		||||
  *argcp -= numToRemove;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutInit(int *argcp, char **argv)
 | 
			
		||||
{
 | 
			
		||||
  char *display = NULL;
 | 
			
		||||
@@ -344,7 +344,7 @@ glutInit(int *argcp, char **argv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
__glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int))
 | 
			
		||||
{
 | 
			
		||||
  __glutExitFunc = exitfunc;
 | 
			
		||||
@@ -353,7 +353,7 @@ __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutInitWindowPosition(int x, int y)
 | 
			
		||||
{
 | 
			
		||||
  __glutInitX = x;
 | 
			
		||||
@@ -367,7 +367,7 @@ glutInitWindowPosition(int x, int y)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutInitWindowSize(int width, int height)
 | 
			
		||||
{
 | 
			
		||||
  __glutInitWidth = width;
 | 
			
		||||
@@ -381,7 +381,7 @@ glutInitWindowSize(int width, int height)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutInitDisplayMode(unsigned int mask)
 | 
			
		||||
{
 | 
			
		||||
  __glutDisplayMode = mask;
 | 
			
		||||
 
 | 
			
		||||
@@ -581,7 +581,7 @@ __glutUpdateInputDeviceMask(GLUTwindow * window)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutDeviceGet(GLenum param)
 | 
			
		||||
{
 | 
			
		||||
  probeDevices();
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
@@ -48,7 +48,7 @@ glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutForceJoystickFunc(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(KeyPressMask,
 | 
			
		||||
@@ -18,7 +18,7 @@ glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)
 | 
			
		||||
  __glutCurrentWindow->keyboard = keyboardFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSpecialFunc(GLUTspecialCB specialFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(KeyPressMask,
 | 
			
		||||
 
 | 
			
		||||
@@ -8,13 +8,13 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutIgnoreKeyRepeat(int ignore)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->ignoreKeyRepeat = ignore;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSetKeyRepeat(int repeatMode)
 | 
			
		||||
{
 | 
			
		||||
#if !defined(_WIN32)
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(KeyReleaseMask,
 | 
			
		||||
@@ -18,7 +18,7 @@ glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc)
 | 
			
		||||
  __glutCurrentWindow->keyboardUp = keyboardUpFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSpecialUpFunc(GLUTspecialCB specialUpFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(KeyReleaseMask,
 | 
			
		||||
 
 | 
			
		||||
@@ -831,7 +831,7 @@ installMenuCallbacks(void)
 | 
			
		||||
  __glutGetMenuItem = getMenuItem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutCreateMenu(GLUTselectCB selectFunc)
 | 
			
		||||
{
 | 
			
		||||
  XSetWindowAttributes wa;
 | 
			
		||||
@@ -890,7 +890,7 @@ glutCreateMenu(GLUTselectCB selectFunc)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutGetMenu(void)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutCurrentMenu) {
 | 
			
		||||
@@ -900,7 +900,7 @@ glutGetMenu(void)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSetMenu(int menuid)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenu *menu;
 | 
			
		||||
@@ -940,7 +940,7 @@ __glutSetMenuItem(GLUTmenuItem * item, const char *label,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutAddMenuEntry(const char *label, int value)
 | 
			
		||||
{
 | 
			
		||||
  XSetWindowAttributes wa;
 | 
			
		||||
@@ -968,7 +968,7 @@ glutAddMenuEntry(const char *label, int value)
 | 
			
		||||
  __glutCurrentMenu->list = entry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutAddSubMenu(const char *label, int menu)
 | 
			
		||||
{
 | 
			
		||||
  XSetWindowAttributes wa;
 | 
			
		||||
@@ -997,7 +997,7 @@ glutAddSubMenu(const char *label, int menu)
 | 
			
		||||
  __glutCurrentMenu->list = submenu;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutAttachMenu(int button)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutMappedMenu) {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,19 +29,19 @@
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
/* DEPRICATED, use glutMenuStatusFunc instead. */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutMenuStateFunc(GLUTmenuStateCB menuStateFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutMenuStatusFunc = menuStatusFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutDestroyMenu(int menunum)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenu *menu = __glutGetMenuByNum(menunum);
 | 
			
		||||
@@ -68,7 +68,7 @@ glutDestroyMenu(int menunum)
 | 
			
		||||
  free(menu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutChangeToMenuEntry(int num, const char *label, int value)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *item;
 | 
			
		||||
@@ -95,7 +95,7 @@ glutChangeToMenuEntry(int num, const char *label, int value)
 | 
			
		||||
  __glutWarning("Current menu has no %d item.", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutChangeToSubMenu(int num, const char *label, int menu)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *item;
 | 
			
		||||
@@ -122,7 +122,7 @@ glutChangeToSubMenu(int num, const char *label, int menu)
 | 
			
		||||
  __glutWarning("Current menu has no %d item.", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutRemoveMenuItem(int num)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *item, **prev, *remaining;
 | 
			
		||||
@@ -173,7 +173,7 @@ glutRemoveMenuItem(int num)
 | 
			
		||||
  __glutWarning("Current menu has no %d item.", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutDetachMenu(int button)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutMappedMenu)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutGetModifiers(void)
 | 
			
		||||
{
 | 
			
		||||
  int modifiers;
 | 
			
		||||
 
 | 
			
		||||
@@ -356,7 +356,7 @@ determineOverlayVisual(int *treatAsSingle, Bool * visAlloced, void **fbc)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutEstablishOverlay(void)
 | 
			
		||||
{
 | 
			
		||||
  GLUToverlay *overlay;
 | 
			
		||||
@@ -458,7 +458,7 @@ glutEstablishOverlay(void)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutRemoveOverlay(void)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window = __glutCurrentWindow;
 | 
			
		||||
@@ -481,7 +481,7 @@ glutRemoveOverlay(void)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutUseLayer(GLenum layer)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window = __glutCurrentWindow;
 | 
			
		||||
@@ -511,7 +511,7 @@ glutUseLayer(GLenum layer)
 | 
			
		||||
  __glutSetWindow(window);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutPostOverlayRedisplay(void)
 | 
			
		||||
{
 | 
			
		||||
  __glutPostRedisplay(__glutCurrentWindow, GLUT_OVERLAY_REDISPLAY_WORK);
 | 
			
		||||
@@ -521,13 +521,13 @@ glutPostOverlayRedisplay(void)
 | 
			
		||||
   glutSetWindow call (entailing an expensive OpenGL context
 | 
			
		||||
   switch), particularly useful when multiple windows need
 | 
			
		||||
   redisplays posted at the same times. */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutPostWindowOverlayRedisplay(int win)
 | 
			
		||||
{
 | 
			
		||||
  __glutPostRedisplay(__glutWindowList[win - 1], GLUT_OVERLAY_REDISPLAY_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutOverlayDisplayFunc(GLUTdisplayCB displayFunc)
 | 
			
		||||
{
 | 
			
		||||
  if (!__glutCurrentWindow->overlay) {
 | 
			
		||||
@@ -537,7 +537,7 @@ glutOverlayDisplayFunc(GLUTdisplayCB displayFunc)
 | 
			
		||||
  __glutCurrentWindow->overlay->display = displayFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutHideOverlay(void)
 | 
			
		||||
{
 | 
			
		||||
  if (!__glutCurrentWindow->overlay) {
 | 
			
		||||
@@ -548,7 +548,7 @@ glutHideOverlay(void)
 | 
			
		||||
  __glutCurrentWindow->overlay->shownState = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutShowOverlay(void)
 | 
			
		||||
{
 | 
			
		||||
  if (!__glutCurrentWindow->overlay) {
 | 
			
		||||
@@ -559,7 +559,7 @@ glutShowOverlay(void)
 | 
			
		||||
  __glutCurrentWindow->overlay->shownState = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutLayerGet(GLenum param)
 | 
			
		||||
{
 | 
			
		||||
  switch (param) {
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ initQuadObj(void)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
  QUAD_OBJ_INIT();
 | 
			
		||||
@@ -77,7 +77,7 @@ glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
 | 
			
		||||
  gluSphere(quadObj, radius, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
  QUAD_OBJ_INIT();
 | 
			
		||||
@@ -89,7 +89,7 @@ glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
 | 
			
		||||
  gluSphere(quadObj, radius, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireCone(GLdouble base, GLdouble height,
 | 
			
		||||
  GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
@@ -102,7 +102,7 @@ glutWireCone(GLdouble base, GLdouble height,
 | 
			
		||||
  gluCylinder(quadObj, base, 0.0, height, slices, stacks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidCone(GLdouble base, GLdouble height,
 | 
			
		||||
  GLint slices, GLint stacks)
 | 
			
		||||
{
 | 
			
		||||
@@ -160,13 +160,13 @@ drawBox(GLfloat size, GLenum type)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireCube(GLdouble size)
 | 
			
		||||
{
 | 
			
		||||
  drawBox(size, GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidCube(GLdouble size)
 | 
			
		||||
{
 | 
			
		||||
  drawBox(size, GL_QUADS);
 | 
			
		||||
@@ -216,7 +216,7 @@ doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
 | 
			
		||||
  GLint nsides, GLint rings)
 | 
			
		||||
{
 | 
			
		||||
@@ -226,7 +226,7 @@ glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
 | 
			
		||||
  glPopAttrib();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
 | 
			
		||||
  GLint nsides, GLint rings)
 | 
			
		||||
{
 | 
			
		||||
@@ -349,13 +349,13 @@ dodecahedron(GLenum type)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireDodecahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  dodecahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidDodecahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  dodecahedron(GL_TRIANGLE_FAN);
 | 
			
		||||
@@ -466,13 +466,13 @@ octahedron(GLenum shadeType)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireOctahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  octahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidOctahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  octahedron(GL_TRIANGLES);
 | 
			
		||||
@@ -537,13 +537,13 @@ icosahedron(GLenum shadeType)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireIcosahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  icosahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidIcosahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  icosahedron(GL_TRIANGLES);
 | 
			
		||||
@@ -581,13 +581,13 @@ tetrahedron(GLenum shadeType)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWireTetrahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  tetrahedron(GL_LINE_LOOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSolidTetrahedron(void)
 | 
			
		||||
{
 | 
			
		||||
  tetrahedron(GL_TRIANGLES);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->spaceMotion = spaceMotionFunc;
 | 
			
		||||
@@ -16,7 +16,7 @@ glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc)
 | 
			
		||||
    GLUT_DEVICE_MASK_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->spaceRotate = spaceRotateFunc;
 | 
			
		||||
@@ -25,7 +25,7 @@ glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc)
 | 
			
		||||
    GLUT_DEVICE_MASK_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->spaceButton = spaceButtonFunc;
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
#include "glutstroke.h"
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutStrokeCharacter(GLUTstrokeFont font, int c)
 | 
			
		||||
{
 | 
			
		||||
  const StrokeCharRec *ch;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ GLint __glutSwapCount = 0;
 | 
			
		||||
GLint __glutSwapTime = 0;
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSwapBuffers(void)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window = __glutCurrentWindow;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
#include "glutstroke.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutStrokeWidth(GLUTstrokeFont font, int c)
 | 
			
		||||
{
 | 
			
		||||
  StrokeFontPtr fontinfo;
 | 
			
		||||
@@ -30,7 +30,7 @@ glutStrokeWidth(GLUTstrokeFont font, int c)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutStrokeLength(GLUTstrokeFont font, const unsigned char *string)
 | 
			
		||||
{
 | 
			
		||||
  int c, length;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->tabletMotion = tabletMotionFunc;
 | 
			
		||||
@@ -23,7 +23,7 @@ glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->tabletButton = tabletButtonFunc;
 | 
			
		||||
 
 | 
			
		||||
@@ -195,13 +195,13 @@ teapot(GLint grid, GLdouble scale, GLenum type)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSolidTeapot(GLdouble scale)
 | 
			
		||||
{
 | 
			
		||||
  teapot(7, scale, GL_FILL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutWireTeapot(GLdouble scale)
 | 
			
		||||
{
 | 
			
		||||
  teapot(10, scale, GL_LINE);
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ __glutWarning(char *format,...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutReportErrors(void)
 | 
			
		||||
{
 | 
			
		||||
  GLenum error;
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ catchXSGIvcErrors(Display * dpy, XErrorEvent * event)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY 
 | 
			
		||||
int GLUTAPIENTRY 
 | 
			
		||||
glutVideoResizeGet(GLenum param)
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
 | 
			
		||||
@@ -160,7 +160,7 @@ glutVideoResizeGet(GLenum param)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSetupVideoResizing(void)
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
 | 
			
		||||
@@ -173,7 +173,7 @@ glutSetupVideoResizing(void)
 | 
			
		||||
    __glutFatalError("glutEstablishVideoResizing: video resizing not possible.\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutStopVideoResizing(void)
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
 | 
			
		||||
@@ -188,7 +188,7 @@ glutStopVideoResizing(void)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ARGSUSED */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutVideoResize(int x, int y, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
 | 
			
		||||
@@ -207,7 +207,7 @@ glutVideoResize(int x, int y, int width, int height)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ARGSUSED */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutVideoPan(int x, int y, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWarpPointer(int x, int y)
 | 
			
		||||
{
 | 
			
		||||
  XWarpPointer(__glutDisplay, None, __glutCurrentWindow->win,
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,7 @@ __glutGetWindow(Window win)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutGetWindow(void)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutCurrentWindow) {
 | 
			
		||||
@@ -177,7 +177,7 @@ __glutSetWindow(GLUTwindow * window)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSetWindow(int win)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window;
 | 
			
		||||
@@ -695,7 +695,7 @@ __glutCreateWindow(GLUTwindow * parent,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutCreateWindow(const char *title)
 | 
			
		||||
{
 | 
			
		||||
  static int firstWindow = 1;
 | 
			
		||||
@@ -742,7 +742,7 @@ glutCreateWindow(const char *title)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
__glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int))
 | 
			
		||||
{
 | 
			
		||||
  __glutExitFunc = exitfunc;
 | 
			
		||||
@@ -750,7 +750,7 @@ __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int))
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutCreateSubWindow(int win, int x, int y, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window;
 | 
			
		||||
@@ -842,7 +842,7 @@ __glutDestroyWindow(GLUTwindow * window,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutDestroyWindow(int win)
 | 
			
		||||
{
 | 
			
		||||
  GLUTwindow *window = __glutWindowList[win - 1];
 | 
			
		||||
@@ -886,7 +886,7 @@ __glutChangeWindowEventMask(long eventMask, Bool add)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutDisplayFunc(GLUTdisplayCB displayFunc)
 | 
			
		||||
{
 | 
			
		||||
  /* XXX Remove the warning after GLUT 3.0. */
 | 
			
		||||
@@ -895,7 +895,7 @@ glutDisplayFunc(GLUTdisplayCB displayFunc)
 | 
			
		||||
  __glutCurrentWindow->display = displayFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutMouseFunc(GLUTmouseCB mouseFunc)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutCurrentWindow->mouse) {
 | 
			
		||||
@@ -917,7 +917,7 @@ glutMouseFunc(GLUTmouseCB mouseFunc)
 | 
			
		||||
  __glutCurrentWindow->mouse = mouseFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutMotionFunc(GLUTmotionCB motionFunc)
 | 
			
		||||
{
 | 
			
		||||
  /* Hack.  Some window managers (4Dwm by default) will mask
 | 
			
		||||
@@ -948,7 +948,7 @@ glutMotionFunc(GLUTmotionCB motionFunc)
 | 
			
		||||
  __glutCurrentWindow->motion = motionFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(PointerMotionMask,
 | 
			
		||||
@@ -963,7 +963,7 @@ glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)
 | 
			
		||||
  __glutCurrentWindow->passive = passiveMotionFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutEntryFunc(GLUTentryCB entryFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(EnterWindowMask | LeaveWindowMask,
 | 
			
		||||
@@ -974,7 +974,7 @@ glutEntryFunc(GLUTentryCB entryFunc)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutWindowStatusFunc(GLUTwindowStatusCB windowStatusFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutChangeWindowEventMask(VisibilityChangeMask,
 | 
			
		||||
@@ -995,7 +995,7 @@ visibilityHelper(int status)
 | 
			
		||||
    __glutCurrentWindow->visibility(GLUT_VISIBLE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutCurrentWindow->visibility = visibilityFunc;
 | 
			
		||||
@@ -1005,7 +1005,7 @@ glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
 | 
			
		||||
    glutWindowStatusFunc(NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutReshapeFunc(GLUTreshapeCB reshapeFunc)
 | 
			
		||||
{
 | 
			
		||||
  if (reshapeFunc) {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
#include "glutint.h"
 | 
			
		||||
 | 
			
		||||
/* CENTRY */
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSetWindowTitle(const char *title)
 | 
			
		||||
{
 | 
			
		||||
  XTextProperty textprop;
 | 
			
		||||
@@ -39,7 +39,7 @@ glutSetWindowTitle(const char *title)
 | 
			
		||||
  XFlush(__glutDisplay);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutSetIconTitle(const char *title)
 | 
			
		||||
{
 | 
			
		||||
  XTextProperty textprop;
 | 
			
		||||
@@ -55,7 +55,7 @@ glutSetIconTitle(const char *title)
 | 
			
		||||
  XFlush(__glutDisplay);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutPositionWindow(int x, int y)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
@@ -65,7 +65,7 @@ glutPositionWindow(int x, int y)
 | 
			
		||||
  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutReshapeWindow(int w, int h)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
@@ -78,7 +78,7 @@ glutReshapeWindow(int w, int h)
 | 
			
		||||
  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutPopWindow(void)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
@@ -87,7 +87,7 @@ glutPopWindow(void)
 | 
			
		||||
  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutPushWindow(void)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
@@ -96,7 +96,7 @@ glutPushWindow(void)
 | 
			
		||||
  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutIconifyWindow(void)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
@@ -105,7 +105,7 @@ glutIconifyWindow(void)
 | 
			
		||||
  __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutShowWindow(void)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
@@ -113,7 +113,7 @@ glutShowWindow(void)
 | 
			
		||||
  __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY 
 | 
			
		||||
void GLUTAPIENTRY 
 | 
			
		||||
glutHideWindow(void)
 | 
			
		||||
{
 | 
			
		||||
  IGNORE_IN_GAME_MODE();
 | 
			
		||||
 
 | 
			
		||||
@@ -796,7 +796,7 @@ extern void  __glutUpdateInputDeviceMask(GLUTwindow * window);
 | 
			
		||||
extern void __glutDetermineMesaSwapHackSupport(void);
 | 
			
		||||
 | 
			
		||||
/* private routines from glut_gameglut.c */
 | 
			
		||||
extern void GLUTAPIENTRYV __glutCloseDownGameMode(void);
 | 
			
		||||
extern void __glutCloseDownGameMode(void);
 | 
			
		||||
 | 
			
		||||
/* private variables from glut_swap.c (BrianP) */
 | 
			
		||||
extern GLint __glutFPS;
 | 
			
		||||
 
 | 
			
		||||
@@ -29,13 +29,13 @@ static int menuListSize = 0;
 | 
			
		||||
static UINT uniqueMenuHandler = 1;
 | 
			
		||||
 | 
			
		||||
/* DEPRICATED, use glutMenuStatusFunc instead. */
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutMenuStateFunc(GLUTmenuStateCB menuStateFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc)
 | 
			
		||||
{
 | 
			
		||||
  __glutMenuStatusFunc = menuStatusFunc;
 | 
			
		||||
@@ -231,7 +231,7 @@ menuModificationError(void)
 | 
			
		||||
  __glutFatalError("menu manipulation not allowed while menus in use.");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutCreateMenu(GLUTselectCB selectFunc)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenu *menu;
 | 
			
		||||
@@ -259,14 +259,14 @@ glutCreateMenu(GLUTselectCB selectFunc)
 | 
			
		||||
  return menuid + 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
__glutCreateMenuWithExit(GLUTselectCB selectFunc, void (__cdecl *exitfunc)(int))
 | 
			
		||||
{
 | 
			
		||||
  __glutExitFunc = exitfunc;
 | 
			
		||||
  return glutCreateMenu(selectFunc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutDestroyMenu(int menunum)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenu *menu = __glutGetMenuByNum(menunum);
 | 
			
		||||
@@ -293,7 +293,7 @@ glutDestroyMenu(int menunum)
 | 
			
		||||
  free(menu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY
 | 
			
		||||
int GLUTAPIENTRY
 | 
			
		||||
glutGetMenu(void)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutCurrentMenu) {
 | 
			
		||||
@@ -303,7 +303,7 @@ glutGetMenu(void)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutSetMenu(int menuid)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenu *menu;
 | 
			
		||||
@@ -342,7 +342,7 @@ setMenuItem(GLUTmenuItem * item, const char *label,
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutAddMenuEntry(const char *label, int value)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *entry;
 | 
			
		||||
@@ -361,7 +361,7 @@ glutAddMenuEntry(const char *label, int value)
 | 
			
		||||
  __glutCurrentMenu->list = entry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutAddSubMenu(const char *label, int menu)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *submenu;
 | 
			
		||||
@@ -386,7 +386,7 @@ glutAddSubMenu(const char *label, int menu)
 | 
			
		||||
  __glutCurrentMenu->list = submenu;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutChangeToMenuEntry(int num, const char *label, int value)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *item;
 | 
			
		||||
@@ -426,7 +426,7 @@ glutChangeToMenuEntry(int num, const char *label, int value)
 | 
			
		||||
  __glutWarning("Current menu has no %d item.", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutChangeToSubMenu(int num, const char *label, int menu)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenu *popupmenu;
 | 
			
		||||
@@ -468,7 +468,7 @@ glutChangeToSubMenu(int num, const char *label, int menu)
 | 
			
		||||
  __glutWarning("Current menu has no %d item.", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutRemoveMenuItem(int num)
 | 
			
		||||
{
 | 
			
		||||
  GLUTmenuItem *item, **prev;
 | 
			
		||||
@@ -501,7 +501,7 @@ glutRemoveMenuItem(int num)
 | 
			
		||||
  __glutWarning("Current menu has no %d item.", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutAttachMenu(int button)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutCurrentWindow == __glutGameModeWindow) {
 | 
			
		||||
@@ -517,7 +517,7 @@ glutAttachMenu(int button)
 | 
			
		||||
  __glutCurrentWindow->menu[button] = __glutCurrentMenu->id + 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIENTRY
 | 
			
		||||
void GLUTAPIENTRY
 | 
			
		||||
glutDetachMenu(int button)
 | 
			
		||||
{
 | 
			
		||||
  if (__glutMappedMenu) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
/* $Id: GLView.cpp,v 1.7 2002/10/17 14:25:30 brianp Exp $ */
 | 
			
		||||
/* $Id: GLView.cpp,v 1.7.2.2 2003/03/30 15:48:48 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.1
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
@@ -38,7 +38,6 @@ extern "C" {
 | 
			
		||||
#include "extensions.h"
 | 
			
		||||
#include "macros.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include "mem.h"
 | 
			
		||||
#include "mmath.h"
 | 
			
		||||
#include "mtypes.h"
 | 
			
		||||
#include "texformat.h"
 | 
			
		||||
@@ -276,9 +275,7 @@ BGLView::BGLView(BRect rect, char *name,
 | 
			
		||||
                                            );
 | 
			
		||||
 | 
			
		||||
   // create core context
 | 
			
		||||
   __GLimports imports;
 | 
			
		||||
   _mesa_init_default_imports(&imports, md);
 | 
			
		||||
   GLcontext * ctx = _mesa_create_context( visual, NULL, &imports);
 | 
			
		||||
   GLcontext * ctx = _mesa_create_context(visual, NULL, md, GL_FALSE);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   // create core framebuffer
 | 
			
		||||
@@ -291,7 +288,7 @@ BGLView::BGLView(BRect rect, char *name,
 | 
			
		||||
 | 
			
		||||
   _mesa_enable_sw_extensions(ctx);
 | 
			
		||||
   _mesa_enable_1_3_extensions(ctx);
 | 
			
		||||
   //_mesa_enable_1_4_extensions(ctx);
 | 
			
		||||
   _mesa_enable_1_4_extensions(ctx);
 | 
			
		||||
 | 
			
		||||
   /* Initialize the software rasterizer and helper modules.
 | 
			
		||||
    */
 | 
			
		||||
@@ -648,7 +645,7 @@ void MesaDriver::UnlockGL()
 | 
			
		||||
 | 
			
		||||
void MesaDriver::SwapBuffers() const
 | 
			
		||||
{
 | 
			
		||||
	// _mesa_swap_buffers();
 | 
			
		||||
        // _mesa_notifySwapBuffers(m_glcontext);
 | 
			
		||||
 | 
			
		||||
	if (m_bitmap) {
 | 
			
		||||
		m_bglview->LockLooper();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
/* $Id: t_dd_vbtmp.h,v 1.23 2002/10/29 20:29:05 brianp Exp $ */
 | 
			
		||||
/* $Id: t_dd_vbtmp.h,v 1.23.2.1 2003/01/13 15:47:07 brianp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.1
 | 
			
		||||
 * Version:  5.0.1
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 1999-2003  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"),
 | 
			
		||||
@@ -216,7 +216,7 @@ static void TAG(emit)( GLcontext *ctx,
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (VB->importable_data) {
 | 
			
		||||
   if (VB->importable_data || (DO_SPEC && !spec_stride) || (DO_FOG && !fog_stride)) {
 | 
			
		||||
      /* May have nonstandard strides:
 | 
			
		||||
       */
 | 
			
		||||
      if (start) {
 | 
			
		||||
@@ -235,7 +235,7 @@ static void TAG(emit)( GLcontext *ctx,
 | 
			
		||||
	    STRIDE_4UB(spec, start * spec_stride);
 | 
			
		||||
	 if (DO_FOG)
 | 
			
		||||
	    /*STRIDE_F(fog, start * fog_stride);*/
 | 
			
		||||
	    fog =  (GLfloat (*)[4])((GLfloat *)fog + start * fog_stride);
 | 
			
		||||
	    fog =  (GLfloat (*)[4])((GLubyte *)fog + start * fog_stride);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      for (i=start; i < end; i++, v = (VERTEX *)((GLubyte *)v + stride)) {
 | 
			
		||||
@@ -271,7 +271,7 @@ static void TAG(emit)( GLcontext *ctx,
 | 
			
		||||
	 if (DO_FOG) {
 | 
			
		||||
	    v->v.specular.alpha = fog[0][0] * 255.0;
 | 
			
		||||
	    /*STRIDE_F(fog, fog_stride);*/
 | 
			
		||||
	    fog =  (GLfloat (*)[4])((GLfloat *)fog +  fog_stride);
 | 
			
		||||
	    fog =  (GLfloat (*)[4])((GLubyte *)fog + fog_stride);
 | 
			
		||||
	 }
 | 
			
		||||
	 if (DO_TEX0) {
 | 
			
		||||
	    v->v.u0 = tc0[0][0];
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										199
									
								
								src/mesa/drivers/dos/blit.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								src/mesa/drivers/dos/blit.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.0
 | 
			
		||||
 * 
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		.file	"blit.S"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * extern unsigned int vesa_gran_mask, vesa_gran_shift;
 | 
			
		||||
 * extern int vl_video_selector;
 | 
			
		||||
 | 
			
		||||
 * extern void *vl_current_draw_buffer;
 | 
			
		||||
 * extern int vl_current_stride, vl_current_height;
 | 
			
		||||
 * extern int vl_current_offset, vl_current_delta;
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
		.text
 | 
			
		||||
 | 
			
		||||
/* Desc: VESA bank switching routine (BIOS)
 | 
			
		||||
 *
 | 
			
		||||
 * In  : EBX=0, EDX = bank number
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: thrashes EAX
 | 
			
		||||
 */
 | 
			
		||||
		.p2align 5,,31
 | 
			
		||||
_vesa_swbankBIOS:
 | 
			
		||||
		movw	$0x4f05, %ax
 | 
			
		||||
		int	$0x10
 | 
			
		||||
		ret
 | 
			
		||||
 | 
			
		||||
		.p2align 2,,3
 | 
			
		||||
		.global	_vesa_swbank
 | 
			
		||||
_vesa_swbank:	.long	_vesa_swbankBIOS
 | 
			
		||||
 | 
			
		||||
/* Desc: void vesa_b_dump_virtual (void);
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses current draw buffer
 | 
			
		||||
 */
 | 
			
		||||
		.p2align 5,,31
 | 
			
		||||
		.global	_vesa_b_dump_virtual
 | 
			
		||||
_vesa_b_dump_virtual:
 | 
			
		||||
		cld
 | 
			
		||||
		pushl	%es
 | 
			
		||||
		pushl	%ebx
 | 
			
		||||
		pushl	%esi
 | 
			
		||||
		pushl	%edi
 | 
			
		||||
		pushl	%ebp
 | 
			
		||||
		movl	_vl_video_selector, %es
 | 
			
		||||
		movl	_vl_current_draw_buffer, %esi
 | 
			
		||||
		movl	_vl_current_offset, %edi
 | 
			
		||||
		movl	_vesa_gran_shift, %ecx
 | 
			
		||||
		movl	_vesa_gran_mask, %ebp
 | 
			
		||||
		movl	%edi, %edx
 | 
			
		||||
		xorl	%ebx, %ebx
 | 
			
		||||
		andl	%ebp, %edi
 | 
			
		||||
		shrl	%cl, %edx
 | 
			
		||||
		incl	%ebp
 | 
			
		||||
		call	*_vesa_swbank
 | 
			
		||||
		movl	_vl_current_stride, %ecx
 | 
			
		||||
		movl	_vl_current_height, %eax
 | 
			
		||||
		movl	_vl_current_delta, %ebx
 | 
			
		||||
		shrl	$2, %ecx
 | 
			
		||||
		.balign	4
 | 
			
		||||
	0:
 | 
			
		||||
		pushl	%ecx
 | 
			
		||||
		.balign	4
 | 
			
		||||
	1:
 | 
			
		||||
		cmpl	%ebp, %edi
 | 
			
		||||
		jb	2f
 | 
			
		||||
		pushl	%eax
 | 
			
		||||
		pushl	%ebx
 | 
			
		||||
		incl	%edx
 | 
			
		||||
		xorl	%ebx, %ebx
 | 
			
		||||
		call	*_vesa_swbank
 | 
			
		||||
		popl	%ebx
 | 
			
		||||
		popl	%eax
 | 
			
		||||
		subl	%ebp, %edi
 | 
			
		||||
		.balign	4
 | 
			
		||||
	2:
 | 
			
		||||
		movsl
 | 
			
		||||
		decl	%ecx
 | 
			
		||||
		jnz	1b
 | 
			
		||||
		popl	%ecx
 | 
			
		||||
		addl	%ebx, %edi
 | 
			
		||||
		decl	%eax
 | 
			
		||||
		jnz	0b
 | 
			
		||||
		popl	%ebp
 | 
			
		||||
		popl	%edi
 | 
			
		||||
		popl	%esi
 | 
			
		||||
		popl	%ebx
 | 
			
		||||
		popl	%es
 | 
			
		||||
		ret
 | 
			
		||||
 | 
			
		||||
/* Desc: void vesa_l_dump_virtual (void);
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses current draw buffer
 | 
			
		||||
 */
 | 
			
		||||
		.p2align 5,,31
 | 
			
		||||
		.global	_vesa_l_dump_virtual
 | 
			
		||||
_vesa_l_dump_virtual:
 | 
			
		||||
		cld
 | 
			
		||||
		pushl	%es
 | 
			
		||||
		pushl	%esi
 | 
			
		||||
		pushl	%edi
 | 
			
		||||
		movl	_vl_video_selector, %es
 | 
			
		||||
		movl	_vl_current_draw_buffer, %esi
 | 
			
		||||
		movl	_vl_current_offset, %edi
 | 
			
		||||
		movl	_vl_current_stride, %ecx
 | 
			
		||||
		movl	_vl_current_height, %edx
 | 
			
		||||
		movl	_vl_current_delta, %eax
 | 
			
		||||
		shrl	$2, %ecx
 | 
			
		||||
		.balign	4
 | 
			
		||||
	0:
 | 
			
		||||
		pushl	%ecx
 | 
			
		||||
		rep;	movsl
 | 
			
		||||
		popl	%ecx
 | 
			
		||||
		addl	%eax, %edi
 | 
			
		||||
		decl	%edx
 | 
			
		||||
		jnz	0b
 | 
			
		||||
		popl	%edi
 | 
			
		||||
		popl	%esi
 | 
			
		||||
		popl	%es
 | 
			
		||||
		ret
 | 
			
		||||
 | 
			
		||||
/* Desc: void vesa_l_dump_virtual_mmx (void);
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses current draw buffer
 | 
			
		||||
 */
 | 
			
		||||
		.p2align 5,,31
 | 
			
		||||
		.global	_vesa_l_dump_virtual_mmx
 | 
			
		||||
_vesa_l_dump_virtual_mmx:
 | 
			
		||||
#ifdef USE_MMX_ASM
 | 
			
		||||
		pushl	%esi
 | 
			
		||||
		pushl	%edi
 | 
			
		||||
		movl	_vl_video_selector, %fs
 | 
			
		||||
		movl	_vl_current_draw_buffer, %esi
 | 
			
		||||
		movl	_vl_current_offset, %edi
 | 
			
		||||
		movl	_vl_current_stride, %ecx
 | 
			
		||||
		movl	_vl_current_height, %edx
 | 
			
		||||
		movl	_vl_current_delta, %eax
 | 
			
		||||
		shrl	$3, %ecx
 | 
			
		||||
		.balign	4
 | 
			
		||||
	0:
 | 
			
		||||
		pushl	%ecx
 | 
			
		||||
		.balign	4
 | 
			
		||||
	1:
 | 
			
		||||
		movq	(%esi), %mm0
 | 
			
		||||
		addl	$8, %esi
 | 
			
		||||
		movq	%mm0, %fs:(%edi)
 | 
			
		||||
		addl	$8, %edi
 | 
			
		||||
		decl	%ecx
 | 
			
		||||
		jnz	1b
 | 
			
		||||
		popl	%ecx
 | 
			
		||||
		addl	%eax, %edi
 | 
			
		||||
		decl	%edx
 | 
			
		||||
		jnz	0b
 | 
			
		||||
		popl	%edi
 | 
			
		||||
		popl	%esi
 | 
			
		||||
		emms
 | 
			
		||||
#endif
 | 
			
		||||
		ret
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -23,7 +23,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.1 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
 | 
			
		||||
#include <dpmi.h>
 | 
			
		||||
 | 
			
		||||
#include "dpmiint.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -46,7 +46,7 @@
 | 
			
		||||
/* _create_linear_mapping:
 | 
			
		||||
 *  Maps a physical address range into linear memory.
 | 
			
		||||
 */
 | 
			
		||||
static int _create_linear_mapping (unsigned long *linear, unsigned long physaddr, int size)
 | 
			
		||||
int _create_linear_mapping (unsigned long *linear, unsigned long physaddr, int size)
 | 
			
		||||
{
 | 
			
		||||
 __dpmi_meminfo meminfo;
 | 
			
		||||
 | 
			
		||||
@@ -71,7 +71,7 @@ static int _create_linear_mapping (unsigned long *linear, unsigned long physaddr
 | 
			
		||||
/* _remove_linear_mapping:
 | 
			
		||||
 *  Frees the DPMI resources being used to map a linear address range.
 | 
			
		||||
 */
 | 
			
		||||
static void _remove_linear_mapping (unsigned long *linear)
 | 
			
		||||
void _remove_linear_mapping (unsigned long *linear)
 | 
			
		||||
{
 | 
			
		||||
 __dpmi_meminfo meminfo;
 | 
			
		||||
 | 
			
		||||
@@ -127,3 +127,22 @@ void _remove_selector (int *segment)
 | 
			
		||||
    *segment = 0;
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: retrieve CPU MMX capability
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : FALSE if CPU cannot do MMX
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
int _can_mmx (void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef USE_MMX_ASM
 | 
			
		||||
 extern int _mesa_identify_x86_cpu_features (void);
 | 
			
		||||
 return (_mesa_identify_x86_cpu_features() & 0x00800000);
 | 
			
		||||
#else
 | 
			
		||||
 return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.1 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -31,8 +31,10 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef VIDEOINT_H_included
 | 
			
		||||
#define VIDEOINT_H_included
 | 
			
		||||
#ifndef INTERNAL_H_included
 | 
			
		||||
#define INTERNAL_H_included
 | 
			
		||||
 | 
			
		||||
#include "../mmath.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * general purpose defines, etc.
 | 
			
		||||
@@ -72,28 +74,56 @@ typedef struct vl_mode {
 | 
			
		||||
 * video driver structure
 | 
			
		||||
 */
 | 
			
		||||
typedef struct {
 | 
			
		||||
        vl_mode *(*getmodes) (void);
 | 
			
		||||
        vl_mode *(*init) (void);
 | 
			
		||||
        int (*entermode) (vl_mode *p, int refresh);
 | 
			
		||||
        void (*blit) (void);
 | 
			
		||||
        void (*setCI_f) (int index, float red, float green, float blue);
 | 
			
		||||
        void (*setCI_i) (int index, int red, int green, int blue);
 | 
			
		||||
        int (*get) (int pname, int *params);
 | 
			
		||||
        void (*restore) (void);
 | 
			
		||||
        void (*finit) (void);
 | 
			
		||||
        void (*fini) (void);
 | 
			
		||||
} vl_driver;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * memory mapping
 | 
			
		||||
 */
 | 
			
		||||
int _create_linear_mapping (unsigned long *linear, unsigned long physaddr, int size);
 | 
			
		||||
void _remove_linear_mapping (unsigned long *linear);
 | 
			
		||||
int _create_selector (int *segment, unsigned long base, int size);
 | 
			
		||||
void _remove_selector (int *segment);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * system routines
 | 
			
		||||
 */
 | 
			
		||||
int _can_mmx (void);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * asm routines to deal with virtual buffering
 | 
			
		||||
 */
 | 
			
		||||
extern void v_clear8 (int color);
 | 
			
		||||
#define v_clear15 v_clear16
 | 
			
		||||
extern void v_clear16 (void *buffer, int bytes, int color);
 | 
			
		||||
extern void v_clear32 (void *buffer, int bytes, int color);
 | 
			
		||||
extern void v_clear24 (void *buffer, int bytes, int color);
 | 
			
		||||
extern void v_clear16 (int color);
 | 
			
		||||
extern void v_clear24 (int color);
 | 
			
		||||
extern void v_clear32 (int color);
 | 
			
		||||
 | 
			
		||||
extern void b_dump_virtual (void *buffer, int stride, int height);
 | 
			
		||||
extern void l_dump_virtual (void *buffer, int stride, int height);
 | 
			
		||||
extern void v_clear8_mmx (int color);
 | 
			
		||||
#define v_clear15_mmx v_clear16_mmx
 | 
			
		||||
extern void v_clear16_mmx (int color);
 | 
			
		||||
extern void v_clear24_mmx (int color);
 | 
			
		||||
extern void v_clear32_mmx (int color);
 | 
			
		||||
 | 
			
		||||
extern void v_rect8 (int x, int y, int width, int height, int color);
 | 
			
		||||
#define v_rect15 v_rect16
 | 
			
		||||
extern void v_rect16 (int x, int y, int width, int height, int color);
 | 
			
		||||
extern void v_rect24 (int x, int y, int width, int height, int color);
 | 
			
		||||
extern void v_rect32 (int x, int y, int width, int height, int color);
 | 
			
		||||
 | 
			
		||||
extern void v_putpixel8 (unsigned int offset, int color);
 | 
			
		||||
#define v_putpixel15 v_putpixel16
 | 
			
		||||
extern void v_putpixel16 (void *buffer, int offset, int color);
 | 
			
		||||
extern void v_putpixel24 (void *buffer, int offset, int color);
 | 
			
		||||
extern void v_putpixel32 (void *buffer, int offset, int color);
 | 
			
		||||
extern void v_putpixel16 (unsigned int offset, int color);
 | 
			
		||||
extern void v_putpixel24 (unsigned int offset, int color);
 | 
			
		||||
extern void v_putpixel32 (unsigned int offset, int color);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										377
									
								
								src/mesa/drivers/dos/mga/m_ttemp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										377
									
								
								src/mesa/drivers/dos/mga/m_ttemp.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,377 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W triangle template
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Triangle Rasterizer Template
 | 
			
		||||
 *
 | 
			
		||||
 * This file is #include'd to generate custom triangle rasterizers.
 | 
			
		||||
 *
 | 
			
		||||
 * The following macros may be defined to indicate what auxillary information
 | 
			
		||||
 * must be interplated across the triangle:
 | 
			
		||||
 *    INTERP_Z        - if defined, interpolate Z values
 | 
			
		||||
 *    INTERP_RGB      - if defined, interpolate RGB values
 | 
			
		||||
 *
 | 
			
		||||
 *    TAG             - function name
 | 
			
		||||
 *    CULL            - enable culling for: 0=no, 1=back, -1=front
 | 
			
		||||
 *
 | 
			
		||||
 *    SETUP_CODE      - to be executed once per triangle (usually HW init)
 | 
			
		||||
 *
 | 
			
		||||
 * For flatshaded primitives, the provoking vertex is the final one.
 | 
			
		||||
 * This code was designed for the origin to be in the upper-left corner.
 | 
			
		||||
 *
 | 
			
		||||
 * Inspired by triangle rasterizer code written by Brian Paul.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define TRI_SWAP(a, b)        \
 | 
			
		||||
do {                          \
 | 
			
		||||
    const MGAvertex *tmp = a; \
 | 
			
		||||
    a = b;                    \
 | 
			
		||||
    b = tmp;                  \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3)
 | 
			
		||||
{
 | 
			
		||||
 int area;
 | 
			
		||||
 int x1, y1, x2, y2, x3, y3;
 | 
			
		||||
 int eMaj_dx, eMaj_dy, eBot_dx, eBot_dy, eTop_dx, eTop_dy;
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
#define FIFO_CNT_RGB 3
 | 
			
		||||
 int eMaj_dr, eBot_dr, eMaj_dg, eBot_dg, eMaj_db, eBot_db;
 | 
			
		||||
 int drdx, drdy, dgdx, dgdy, dbdx, dbdy;
 | 
			
		||||
#else
 | 
			
		||||
#define FIFO_CNT_RGB 0
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
#define FIFO_CNT_Z 1
 | 
			
		||||
 int dzdx, dzdy;
 | 
			
		||||
 int eMaj_dz, eBot_dz;
 | 
			
		||||
 int z1, z2, z3;
 | 
			
		||||
#else
 | 
			
		||||
#define FIFO_CNT_Z 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(INTERP_Z) || defined(INTERP_RGB)
 | 
			
		||||
 double one_area;
 | 
			
		||||
#ifndef INTERP_RGB
 | 
			
		||||
 int red = v3->color[0];
 | 
			
		||||
 int green = v3->color[1];
 | 
			
		||||
 int blue = v3->color[2];
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
 unsigned long color = mga_mixrgb_full(v3->color);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 int sgn = 0;
 | 
			
		||||
 | 
			
		||||
 /* sort along the vertical axis */
 | 
			
		||||
 if (v2->win[1] < v1->win[1]) {
 | 
			
		||||
    TRI_SWAP(v1, v2);
 | 
			
		||||
#ifdef CULL
 | 
			
		||||
    cull = -cull;
 | 
			
		||||
#endif
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (v3->win[1] < v1->win[1]) {
 | 
			
		||||
    TRI_SWAP(v1, v3);
 | 
			
		||||
    TRI_SWAP(v2, v3);
 | 
			
		||||
 } else if (v3->win[1] < v2->win[1]) {
 | 
			
		||||
    TRI_SWAP(v2, v3);
 | 
			
		||||
#ifdef CULL
 | 
			
		||||
    cull = -cull;
 | 
			
		||||
#endif    
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 x1 = v1->win[0];
 | 
			
		||||
 y1 = v1->win[1];
 | 
			
		||||
 x2 = v2->win[0];
 | 
			
		||||
 y2 = v2->win[1];
 | 
			
		||||
 x3 = v3->win[0];
 | 
			
		||||
 y3 = v3->win[1];
 | 
			
		||||
 | 
			
		||||
 /* compute deltas for each edge */
 | 
			
		||||
 eMaj_dx = x3 - x1;
 | 
			
		||||
 eMaj_dy = y3 - y1;
 | 
			
		||||
 eBot_dx = x2 - x1;
 | 
			
		||||
 eBot_dy = y2 - y1;
 | 
			
		||||
 eTop_dx = x3 - x2;
 | 
			
		||||
 eTop_dy = y3 - y2;
 | 
			
		||||
 | 
			
		||||
 /* compute area */
 | 
			
		||||
 if ((area = eMaj_dx * eBot_dy - eBot_dx * eMaj_dy) == 0) {
 | 
			
		||||
    return;
 | 
			
		||||
 }
 | 
			
		||||
#ifdef CULL
 | 
			
		||||
 if ((area * cull) > 0) {
 | 
			
		||||
    return;
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 mga_select();
 | 
			
		||||
 | 
			
		||||
 /* set engine state */
 | 
			
		||||
#ifdef SETUP_CODE
 | 
			
		||||
 SETUP_CODE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 /* draw lower triangle */
 | 
			
		||||
#if defined(INTERP_Z) || defined(INTERP_RGB)
 | 
			
		||||
 one_area = (double)(1<<15) / (double)area;
 | 
			
		||||
 mga_fifo(1);
 | 
			
		||||
#else
 | 
			
		||||
 mga_fifo(2);
 | 
			
		||||
 mga_outl(M_FCOL, color);
 | 
			
		||||
#endif
 | 
			
		||||
 mga_outl(M_YDST, y1);
 | 
			
		||||
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
 z1 = v1->win[2];
 | 
			
		||||
 z2 = v2->win[2];
 | 
			
		||||
 z3 = v3->win[2];
 | 
			
		||||
 | 
			
		||||
 /* compute d?/dx and d?/dy derivatives */
 | 
			
		||||
 eMaj_dz = z3 - z1;
 | 
			
		||||
 eBot_dz = z2 - z1;
 | 
			
		||||
 dzdx = (eMaj_dz * eBot_dy - eMaj_dy * eBot_dz) * one_area;
 | 
			
		||||
 dzdy = (eMaj_dx * eBot_dz - eMaj_dz * eBot_dx) * one_area;
 | 
			
		||||
 | 
			
		||||
#ifndef INTERP_RGB
 | 
			
		||||
 mga_fifo(11);
 | 
			
		||||
 mga_outl(M_DR2, dzdx);
 | 
			
		||||
 mga_outl(M_DR3, dzdy);
 | 
			
		||||
 mga_outl(M_DR4, red<<15);
 | 
			
		||||
 mga_outl(M_DR6, 0);
 | 
			
		||||
 mga_outl(M_DR7, 0);
 | 
			
		||||
 mga_outl(M_DR8, green<<15);
 | 
			
		||||
 mga_outl(M_DR10, 0);
 | 
			
		||||
 mga_outl(M_DR11, 0);
 | 
			
		||||
 mga_outl(M_DR12, blue<<15);
 | 
			
		||||
 mga_outl(M_DR14, 0);
 | 
			
		||||
 mga_outl(M_DR15, 0);
 | 
			
		||||
#else
 | 
			
		||||
 mga_fifo(2);
 | 
			
		||||
 mga_outl(M_DR2, dzdx);
 | 
			
		||||
 mga_outl(M_DR3, dzdy);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
 /* compute color deltas */
 | 
			
		||||
 eMaj_dr = v3->color[0] - v1->color[0];
 | 
			
		||||
 eBot_dr = v2->color[0] - v1->color[0];
 | 
			
		||||
 eMaj_dg = v3->color[1] - v1->color[1];
 | 
			
		||||
 eBot_dg = v2->color[1] - v1->color[1];
 | 
			
		||||
 eMaj_db = v3->color[2] - v1->color[2];
 | 
			
		||||
 eBot_db = v2->color[2] - v1->color[2];
 | 
			
		||||
 | 
			
		||||
 /* compute color increments */
 | 
			
		||||
 drdx = (eMaj_dr * eBot_dy - eMaj_dy * eBot_dr) * one_area;
 | 
			
		||||
 drdy = (eMaj_dx * eBot_dr - eMaj_dr * eBot_dx) * one_area;
 | 
			
		||||
 dgdx = (eMaj_dg * eBot_dy - eMaj_dy * eBot_dg) * one_area;
 | 
			
		||||
 dgdy = (eMaj_dx * eBot_dg - eMaj_dg * eBot_dx) * one_area;
 | 
			
		||||
 dbdx = (eMaj_db * eBot_dy - eMaj_dy * eBot_db) * one_area;
 | 
			
		||||
 dbdy = (eMaj_dx * eBot_db - eMaj_db * eBot_dx) * one_area;
 | 
			
		||||
 | 
			
		||||
 mga_fifo(6);
 | 
			
		||||
 mga_outl(M_DR6, drdx);
 | 
			
		||||
 mga_outl(M_DR7, drdy);
 | 
			
		||||
 mga_outl(M_DR10, dgdx);
 | 
			
		||||
 mga_outl(M_DR11, dgdy);
 | 
			
		||||
 mga_outl(M_DR14, dbdx);
 | 
			
		||||
 mga_outl(M_DR15, dbdy);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 if (area > 0) { /* major edge on the right */
 | 
			
		||||
    if (eBot_dy) { /* have lower triangle */
 | 
			
		||||
       mga_fifo(9 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR0, eBot_dy);
 | 
			
		||||
       if (x2 < x1) {
 | 
			
		||||
          mga_outl(M_AR1, eBot_dx + eBot_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eBot_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eBot_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eBot_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR6, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR4, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x1<<16) | x1);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z1<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v1->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v1->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v1->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eBot_dy);
 | 
			
		||||
    } else { /* no lower triangle */
 | 
			
		||||
       mga_fifo(4 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR6, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR4, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x1<<16) | x2);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z2<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v2->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v2->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v2->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* draw upper triangle */
 | 
			
		||||
    if (eTop_dy) {
 | 
			
		||||
       mga_fifo(5);
 | 
			
		||||
       mga_outl(M_AR0, eTop_dy);
 | 
			
		||||
       if (x3 < x2) {
 | 
			
		||||
          mga_outl(M_AR1, eTop_dx + eTop_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eTop_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eTop_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eTop_dx);
 | 
			
		||||
          sgn &= ~M_SDXL;
 | 
			
		||||
       }
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eTop_dy);
 | 
			
		||||
    }
 | 
			
		||||
 } else { /* major edge on the left */
 | 
			
		||||
    if (eBot_dy) { /* have lower triangle */
 | 
			
		||||
       mga_fifo(9 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR0, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR1, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR6, eBot_dy);
 | 
			
		||||
       if (x2 < x1) {
 | 
			
		||||
          mga_outl(M_AR4, eBot_dx + eBot_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eBot_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eBot_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eBot_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x1<<16) | x1);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z1<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v1->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v1->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v1->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eBot_dy);
 | 
			
		||||
    } else { /* no lower triangle */
 | 
			
		||||
       mga_fifo(4 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR0, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR1, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x2<<16) | x1);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z1<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v1->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v1->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v1->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* draw upper triangle */
 | 
			
		||||
    if (eTop_dy) {
 | 
			
		||||
       mga_fifo(5);
 | 
			
		||||
       mga_outl(M_AR6, eTop_dy);
 | 
			
		||||
       if (x3 < x2) {
 | 
			
		||||
          mga_outl(M_AR4, eTop_dx + eTop_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eTop_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eTop_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eTop_dx);
 | 
			
		||||
          sgn &= ~M_SDXR;
 | 
			
		||||
       }
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eTop_dy);
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#undef FIFO_CNT_RGB
 | 
			
		||||
#undef FIFO_CNT_Z
 | 
			
		||||
 | 
			
		||||
#undef TRI_SWAP
 | 
			
		||||
 | 
			
		||||
#undef SETUP_CODE
 | 
			
		||||
#undef INTERP_RGB
 | 
			
		||||
#undef INTERP_Z
 | 
			
		||||
#undef CULL
 | 
			
		||||
#undef TAG
 | 
			
		||||
							
								
								
									
										375
									
								
								src/mesa/drivers/dos/mga/m_ttemp2.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										375
									
								
								src/mesa/drivers/dos/mga/m_ttemp2.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,375 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W triangle template
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Triangle Rasterizer Template
 | 
			
		||||
 *
 | 
			
		||||
 * This file is #include'd to generate custom triangle rasterizers.
 | 
			
		||||
 *
 | 
			
		||||
 * The following macros may be defined to indicate what auxillary information
 | 
			
		||||
 * must be interplated across the triangle:
 | 
			
		||||
 *    INTERP_Z        - if defined, interpolate Z values
 | 
			
		||||
 *    INTERP_RGB      - if defined, interpolate RGB values
 | 
			
		||||
 *
 | 
			
		||||
 *    TAG             - function name
 | 
			
		||||
 *    CULL            - enable culling for: 0=no, 1=back, -1=front
 | 
			
		||||
 *
 | 
			
		||||
 *    SETUP_CODE      - to be executed once per triangle (usually HW init)
 | 
			
		||||
 *
 | 
			
		||||
 * For flatshaded primitives, the provoking vertex is the final one.
 | 
			
		||||
 * This code was designed for the origin to be in the upper-left corner.
 | 
			
		||||
 *
 | 
			
		||||
 * Inspired by triangle rasterizer code written by Brian Paul.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define TRI_SWAP(a, b)        \
 | 
			
		||||
do {                          \
 | 
			
		||||
    const MGAvertex *tmp = a; \
 | 
			
		||||
    a = b;                    \
 | 
			
		||||
    b = tmp;                  \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
void TAG (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3)
 | 
			
		||||
{
 | 
			
		||||
 int area;
 | 
			
		||||
 int x1, y1, x2, y2, x3, y3;
 | 
			
		||||
 int eMaj_dx, eMaj_dy, eBot_dx, eBot_dy, eTop_dx, eTop_dy;
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
#define FIFO_CNT_RGB 3
 | 
			
		||||
 int eMaj_dr, eBot_dr, eMaj_dg, eBot_dg, eMaj_db, eBot_db;
 | 
			
		||||
 int drdx, drdy, dgdx, dgdy, dbdx, dbdy;
 | 
			
		||||
#else
 | 
			
		||||
#define FIFO_CNT_RGB 0
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
#define FIFO_CNT_Z 1
 | 
			
		||||
 int dzdx, dzdy;
 | 
			
		||||
 int eMaj_dz, eBot_dz;
 | 
			
		||||
 int z1, z2, z3;
 | 
			
		||||
#else
 | 
			
		||||
#define FIFO_CNT_Z 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(INTERP_Z) || defined(INTERP_RGB)
 | 
			
		||||
#ifndef INTERP_RGB
 | 
			
		||||
 int red = v3->color[0];
 | 
			
		||||
 int green = v3->color[1];
 | 
			
		||||
 int blue = v3->color[2];
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
 unsigned long color = mga_mixrgb_full(v3->color);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 int sgn = 0;
 | 
			
		||||
 | 
			
		||||
 /* sort along the vertical axis */
 | 
			
		||||
 if (v2->win[1] < v1->win[1]) {
 | 
			
		||||
    TRI_SWAP(v1, v2);
 | 
			
		||||
#ifdef CULL
 | 
			
		||||
    cull = -cull;
 | 
			
		||||
#endif
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (v3->win[1] < v1->win[1]) {
 | 
			
		||||
    TRI_SWAP(v1, v3);
 | 
			
		||||
    TRI_SWAP(v2, v3);
 | 
			
		||||
 } else if (v3->win[1] < v2->win[1]) {
 | 
			
		||||
    TRI_SWAP(v2, v3);
 | 
			
		||||
#ifdef CULL
 | 
			
		||||
    cull = -cull;
 | 
			
		||||
#endif    
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 x1 = v1->win[0];
 | 
			
		||||
 y1 = v1->win[1];
 | 
			
		||||
 x2 = v2->win[0];
 | 
			
		||||
 y2 = v2->win[1];
 | 
			
		||||
 x3 = v3->win[0];
 | 
			
		||||
 y3 = v3->win[1];
 | 
			
		||||
 | 
			
		||||
 /* compute deltas for each edge */
 | 
			
		||||
 eMaj_dx = x3 - x1;
 | 
			
		||||
 eMaj_dy = y3 - y1;
 | 
			
		||||
 eBot_dx = x2 - x1;
 | 
			
		||||
 eBot_dy = y2 - y1;
 | 
			
		||||
 eTop_dx = x3 - x2;
 | 
			
		||||
 eTop_dy = y3 - y2;
 | 
			
		||||
 | 
			
		||||
 /* compute area */
 | 
			
		||||
 if ((area = eMaj_dx * eBot_dy - eBot_dx * eMaj_dy) == 0) {
 | 
			
		||||
    return;
 | 
			
		||||
 }
 | 
			
		||||
#ifdef CULL
 | 
			
		||||
 if ((area * cull) > 0) {
 | 
			
		||||
    return;
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 mga_select();
 | 
			
		||||
 | 
			
		||||
 /* set engine state */
 | 
			
		||||
#ifdef SETUP_CODE
 | 
			
		||||
 SETUP_CODE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 /* draw lower triangle */
 | 
			
		||||
#if defined(INTERP_Z) || defined(INTERP_RGB)
 | 
			
		||||
 mga_fifo(1);
 | 
			
		||||
#else
 | 
			
		||||
 mga_fifo(2);
 | 
			
		||||
 mga_outl(M_FCOL, color);
 | 
			
		||||
#endif
 | 
			
		||||
 mga_outl(M_YDST, y1);
 | 
			
		||||
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
 z1 = v1->win[2];
 | 
			
		||||
 z2 = v2->win[2];
 | 
			
		||||
 z3 = v3->win[2];
 | 
			
		||||
 | 
			
		||||
 /* compute d?/dx and d?/dy derivatives */
 | 
			
		||||
 eMaj_dz = z3 - z1;
 | 
			
		||||
 eBot_dz = z2 - z1;
 | 
			
		||||
 dzdx = ((long long)(eMaj_dz * eBot_dy - eMaj_dy * eBot_dz)<<15) / area;
 | 
			
		||||
 dzdy = ((long long)(eMaj_dx * eBot_dz - eMaj_dz * eBot_dx)<<15) / area;
 | 
			
		||||
 | 
			
		||||
#ifndef INTERP_RGB
 | 
			
		||||
 mga_fifo(11);
 | 
			
		||||
 mga_outl(M_DR2, dzdx);
 | 
			
		||||
 mga_outl(M_DR3, dzdy);
 | 
			
		||||
 mga_outl(M_DR4, red<<15);
 | 
			
		||||
 mga_outl(M_DR6, 0);
 | 
			
		||||
 mga_outl(M_DR7, 0);
 | 
			
		||||
 mga_outl(M_DR8, green<<15);
 | 
			
		||||
 mga_outl(M_DR10, 0);
 | 
			
		||||
 mga_outl(M_DR11, 0);
 | 
			
		||||
 mga_outl(M_DR12, blue<<15);
 | 
			
		||||
 mga_outl(M_DR14, 0);
 | 
			
		||||
 mga_outl(M_DR15, 0);
 | 
			
		||||
#else
 | 
			
		||||
 mga_fifo(2);
 | 
			
		||||
 mga_outl(M_DR2, dzdx);
 | 
			
		||||
 mga_outl(M_DR3, dzdy);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
 /* compute color deltas */
 | 
			
		||||
 eMaj_dr = v3->color[0] - v1->color[0];
 | 
			
		||||
 eBot_dr = v2->color[0] - v1->color[0];
 | 
			
		||||
 eMaj_dg = v3->color[1] - v1->color[1];
 | 
			
		||||
 eBot_dg = v2->color[1] - v1->color[1];
 | 
			
		||||
 eMaj_db = v3->color[2] - v1->color[2];
 | 
			
		||||
 eBot_db = v2->color[2] - v1->color[2];
 | 
			
		||||
 | 
			
		||||
 /* compute color increments */
 | 
			
		||||
 drdx = ((long long)(eMaj_dr * eBot_dy - eMaj_dy * eBot_dr)<<15) / area;
 | 
			
		||||
 drdy = ((long long)(eMaj_dx * eBot_dr - eMaj_dr * eBot_dx)<<15) / area;
 | 
			
		||||
 dgdx = ((long long)(eMaj_dg * eBot_dy - eMaj_dy * eBot_dg)<<15) / area;
 | 
			
		||||
 dgdy = ((long long)(eMaj_dx * eBot_dg - eMaj_dg * eBot_dx)<<15) / area;
 | 
			
		||||
 dbdx = ((long long)(eMaj_db * eBot_dy - eMaj_dy * eBot_db)<<15) / area;
 | 
			
		||||
 dbdy = ((long long)(eMaj_dx * eBot_db - eMaj_db * eBot_dx)<<15) / area;
 | 
			
		||||
 | 
			
		||||
 mga_fifo(6);
 | 
			
		||||
 mga_outl(M_DR6, drdx);
 | 
			
		||||
 mga_outl(M_DR7, drdy);
 | 
			
		||||
 mga_outl(M_DR10, dgdx);
 | 
			
		||||
 mga_outl(M_DR11, dgdy);
 | 
			
		||||
 mga_outl(M_DR14, dbdx);
 | 
			
		||||
 mga_outl(M_DR15, dbdy);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 if (area > 0) { /* major edge on the right */
 | 
			
		||||
    if (eBot_dy) { /* have lower triangle */
 | 
			
		||||
       mga_fifo(9 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR0, eBot_dy);
 | 
			
		||||
       if (x2 < x1) {
 | 
			
		||||
          mga_outl(M_AR1, eBot_dx + eBot_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eBot_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eBot_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eBot_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR6, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR4, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x1<<16) | x1);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z1<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v1->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v1->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v1->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eBot_dy);
 | 
			
		||||
    } else { /* no lower triangle */
 | 
			
		||||
       mga_fifo(4 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR6, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR4, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x1<<16) | x2);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z2<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v2->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v2->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v2->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* draw upper triangle */
 | 
			
		||||
    if (eTop_dy) {
 | 
			
		||||
       mga_fifo(5);
 | 
			
		||||
       mga_outl(M_AR0, eTop_dy);
 | 
			
		||||
       if (x3 < x2) {
 | 
			
		||||
          mga_outl(M_AR1, eTop_dx + eTop_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eTop_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eTop_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eTop_dx);
 | 
			
		||||
          sgn &= ~M_SDXL;
 | 
			
		||||
       }
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eTop_dy);
 | 
			
		||||
    }
 | 
			
		||||
 } else { /* major edge on the left */
 | 
			
		||||
    if (eBot_dy) { /* have lower triangle */
 | 
			
		||||
       mga_fifo(9 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR0, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR1, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR6, eBot_dy);
 | 
			
		||||
       if (x2 < x1) {
 | 
			
		||||
          mga_outl(M_AR4, eBot_dx + eBot_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eBot_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eBot_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eBot_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x1<<16) | x1);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z1<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v1->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v1->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v1->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eBot_dy);
 | 
			
		||||
    } else { /* no lower triangle */
 | 
			
		||||
       mga_fifo(4 + FIFO_CNT_Z + FIFO_CNT_RGB);
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_AR0, eMaj_dy);
 | 
			
		||||
       if (x3 < x1) {
 | 
			
		||||
          mga_outl(M_AR1, eMaj_dx + eMaj_dy - 1);
 | 
			
		||||
          mga_outl(M_AR2, eMaj_dx);
 | 
			
		||||
          sgn |= M_SDXL;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR1, -eMaj_dx);
 | 
			
		||||
          mga_outl(M_AR2, -eMaj_dx);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       mga_outl(M_FXBNDRY, (x2<<16) | x1);
 | 
			
		||||
#ifdef INTERP_Z
 | 
			
		||||
       mga_outl(M_DR0, z1<<15);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef INTERP_RGB
 | 
			
		||||
       mga_outl(M_DR4, v1->color[0]<<15);
 | 
			
		||||
       mga_outl(M_DR8, v1->color[1]<<15);
 | 
			
		||||
       mga_outl(M_DR12, v1->color[2]<<15);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* draw upper triangle */
 | 
			
		||||
    if (eTop_dy) {
 | 
			
		||||
       mga_fifo(5);
 | 
			
		||||
       mga_outl(M_AR6, eTop_dy);
 | 
			
		||||
       if (x3 < x2) {
 | 
			
		||||
          mga_outl(M_AR4, eTop_dx + eTop_dy - 1);
 | 
			
		||||
          mga_outl(M_AR5, eTop_dx);
 | 
			
		||||
          sgn |= M_SDXR;
 | 
			
		||||
       } else {
 | 
			
		||||
          mga_outl(M_AR4, -eTop_dx);
 | 
			
		||||
          mga_outl(M_AR5, -eTop_dx);
 | 
			
		||||
          sgn &= ~M_SDXR;
 | 
			
		||||
       }
 | 
			
		||||
       mga_outl(M_SGN, sgn);
 | 
			
		||||
       mga_outl(M_LEN | M_EXEC, eTop_dy);
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#undef FIFO_CNT_RGB
 | 
			
		||||
#undef FIFO_CNT_Z
 | 
			
		||||
 | 
			
		||||
#undef TRI_SWAP
 | 
			
		||||
 | 
			
		||||
#undef SETUP_CODE
 | 
			
		||||
#undef INTERP_RGB
 | 
			
		||||
#undef INTERP_Z
 | 
			
		||||
#undef CULL
 | 
			
		||||
#undef TAG
 | 
			
		||||
							
								
								
									
										1536
									
								
								src/mesa/drivers/dos/mga/mga.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1536
									
								
								src/mesa/drivers/dos/mga/mga.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										91
									
								
								src/mesa/drivers/dos/mga/mga.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/mesa/drivers/dos/mga/mga.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef MGA_H_included
 | 
			
		||||
#define MGA_H_included
 | 
			
		||||
 | 
			
		||||
#define MGA_GET_CARD_NAME   0x0100
 | 
			
		||||
#define MGA_GET_VRAM        0x0101
 | 
			
		||||
#define MGA_GET_CI_PREC     0x0200
 | 
			
		||||
#define MGA_GET_HPIXELS     0x0201
 | 
			
		||||
#define MGA_GET_SCREEN_SIZE 0x0202
 | 
			
		||||
 | 
			
		||||
int mga_open (int width, int height, int bpp, int buffers, int zbuffer, int refresh);
 | 
			
		||||
void mga_clear (int front, int back, int zed, int left, int top, int width, int height, int color, unsigned short z);
 | 
			
		||||
int mga_get (int pname, int *params);
 | 
			
		||||
void mga_close (int restore, int unmap);
 | 
			
		||||
 | 
			
		||||
extern void (*mga_putpixel) (unsigned int offset, int color);
 | 
			
		||||
extern int (*mga_getpixel) (unsigned int offset);
 | 
			
		||||
extern void (*mga_getrgba) (unsigned int offset, unsigned char rgba[4]);
 | 
			
		||||
extern int (*mga_mixrgb) (const unsigned char rgb[]);
 | 
			
		||||
 | 
			
		||||
#define MGA_BACKBUFFER !0
 | 
			
		||||
#define MGA_FRONTBUFFER 0
 | 
			
		||||
void mga_set_readbuffer (int buffer);
 | 
			
		||||
void mga_set_writebuffer (int buffer);
 | 
			
		||||
void mga_swapbuffers (int swapinterval);
 | 
			
		||||
 | 
			
		||||
unsigned short mga_getz (int offset);
 | 
			
		||||
void mga_setz (int offset, unsigned short z);
 | 
			
		||||
 | 
			
		||||
void mga_wait_idle (void);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * vertex structure, used for primitive rendering
 | 
			
		||||
 */
 | 
			
		||||
typedef struct {
 | 
			
		||||
        int win[4];             /* X, Y, Z, ? */
 | 
			
		||||
        unsigned char color[4]; /* R, G, B, A */
 | 
			
		||||
} MGAvertex;
 | 
			
		||||
 | 
			
		||||
void mga_draw_line_rgb_flat (const MGAvertex *v1, const MGAvertex *v2);
 | 
			
		||||
void mga_draw_line_rgb_flat_zless (const MGAvertex *v1, const MGAvertex *v2);
 | 
			
		||||
void mga_draw_line_rgb_iter (const MGAvertex *v1, const MGAvertex *v2);
 | 
			
		||||
void mga_draw_line_rgb_iter_zless (const MGAvertex *v1, const MGAvertex *v2);
 | 
			
		||||
 | 
			
		||||
void mga_draw_tri_rgb_flat (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3);
 | 
			
		||||
void mga_draw_tri_rgb_flat_zless (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3);
 | 
			
		||||
void mga_draw_tri_rgb_iter (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3);
 | 
			
		||||
void mga_draw_tri_rgb_iter_zless (int cull, const MGAvertex *v1, const MGAvertex *v2, const MGAvertex *v3);
 | 
			
		||||
 | 
			
		||||
void mga_draw_rect_rgb_flat (int left, int top, int width, int height, int color);
 | 
			
		||||
void mga_draw_rect_rgb_tx32 (int left, int top, int width, int height, const unsigned long *bitmap);
 | 
			
		||||
void mga_draw_rect_rgb_tx24 (int left, int top, int width, int height, const unsigned long *bitmap);
 | 
			
		||||
void mga_draw_span_rgb_tx32 (int left, int top, int width, const unsigned long *bitmap);
 | 
			
		||||
void mga_draw_span_rgb_tx24 (int left, int top, int width, const unsigned long *bitmap);
 | 
			
		||||
 | 
			
		||||
void mga_iload_32RGB (int left, int top, int width, int height, const unsigned long *bitmap);
 | 
			
		||||
void mga_iload_24RGB (int left, int top, int width, int height, const unsigned long *bitmap);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										416
									
								
								src/mesa/drivers/dos/mga/mga_hw.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										416
									
								
								src/mesa/drivers/dos/mga/mga_hw.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,416 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W HW mapping
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <crt0.h>
 | 
			
		||||
#include <dpmi.h>
 | 
			
		||||
#include <pc.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/nearptr.h>
 | 
			
		||||
#include <sys/segments.h>
 | 
			
		||||
 | 
			
		||||
#include "../internal.h"
 | 
			
		||||
#include "mga_reg.h"
 | 
			
		||||
#include "mga_hw.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Hack alert:
 | 
			
		||||
 * these should really be externs
 | 
			
		||||
 */
 | 
			
		||||
/* PCI access routines */
 | 
			
		||||
static int pci_find_device (int deviceID, int vendorID, int deviceIndex, int *handle);
 | 
			
		||||
static unsigned long pci_read_long (int handle, int index);
 | 
			
		||||
static void pci_write_long (int handle, int index, unsigned long value);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* PCI device identifiers */
 | 
			
		||||
#define MATROX_VENDOR_ID 0x102B
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
        MATROX_MILL_ID = 0x0519
 | 
			
		||||
} MATROX_ID;
 | 
			
		||||
 | 
			
		||||
static MATROX_ID matrox_id_list[] = {
 | 
			
		||||
       MATROX_MILL_ID,
 | 
			
		||||
       0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* internal hardware data structures */
 | 
			
		||||
#if !MGA_FARPTR
 | 
			
		||||
static int dirty;
 | 
			
		||||
#endif
 | 
			
		||||
static int bus_id;
 | 
			
		||||
static unsigned long reg40;
 | 
			
		||||
static unsigned long io_mem_base[4], linear_base;
 | 
			
		||||
static unsigned long io_mem_size[4], linear_size;
 | 
			
		||||
static MATROX_ID matrox_id;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* interface structures containing hardware pointer data */
 | 
			
		||||
MGA_HWPTR mgaptr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: create MMAP
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
static int _create_mmap (__dpmi_paddr *m, unsigned long base, unsigned long size)
 | 
			
		||||
{
 | 
			
		||||
#if MGA_FARPTR
 | 
			
		||||
 int sel;
 | 
			
		||||
 if (_create_selector(&sel, base, size)) {
 | 
			
		||||
    return -1;
 | 
			
		||||
 }
 | 
			
		||||
 m->selector = sel;
 | 
			
		||||
 m->offset32 = 0;
 | 
			
		||||
#else
 | 
			
		||||
 m->selector = _my_ds();
 | 
			
		||||
 if (_create_linear_mapping(&m->offset32, base, size)) {
 | 
			
		||||
    return -1;
 | 
			
		||||
 }
 | 
			
		||||
 m->offset32 -= __djgpp_base_address;
 | 
			
		||||
#endif
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: destroy MMAP
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
static void _destroy_mmap (__dpmi_paddr *m)
 | 
			
		||||
{
 | 
			
		||||
#if MGA_FARPTR
 | 
			
		||||
 int sel = m->selector;
 | 
			
		||||
 _remove_selector(&sel);
 | 
			
		||||
#else
 | 
			
		||||
 m->offset32 += __djgpp_base_address;
 | 
			
		||||
 _remove_linear_mapping(&m->offset32);
 | 
			
		||||
#endif
 | 
			
		||||
 m->selector = 0;
 | 
			
		||||
 m->offset32 = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Counts amount of installed RAM
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
static int _mga_get_vram (MATROX_ID chip, unsigned long base)
 | 
			
		||||
{
 | 
			
		||||
 int ProbeSize = 8;
 | 
			
		||||
 int SizeFound = 2;
 | 
			
		||||
 unsigned char tmp;
 | 
			
		||||
 int i;
 | 
			
		||||
 __dpmi_paddr fb;
 | 
			
		||||
 | 
			
		||||
 switch (chip) {
 | 
			
		||||
	case MATROX_MILL_ID:
 | 
			
		||||
	     ProbeSize = 8;
 | 
			
		||||
	     break;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (_create_mmap(&fb, base, ProbeSize*1024*1024)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* turn MGA mode on - enable linear frame buffer (CRTCEXT3) */
 | 
			
		||||
 mga_select();
 | 
			
		||||
 mga_outb(M_CRTC_EXT_INDEX, 3);
 | 
			
		||||
 tmp = mga_inb(M_CRTC_EXT_DATA);
 | 
			
		||||
 mga_outb(M_CRTC_EXT_DATA, tmp | M_MGAMODE);
 | 
			
		||||
 | 
			
		||||
 /* write, read and compare method */
 | 
			
		||||
 for (i=ProbeSize; i>2; i-= 2) {
 | 
			
		||||
     hwptr_pokeb(fb, i*1024*1024 - 1, 0xAA);
 | 
			
		||||
     mga_select();
 | 
			
		||||
     mga_outb(M_CRTC_INDEX, 0); /* flush the cache */
 | 
			
		||||
     mga_inl(M_STATUS); /* delay */
 | 
			
		||||
     mga_inl(M_STATUS); /* delay */
 | 
			
		||||
     mga_inl(M_STATUS); /* delay */
 | 
			
		||||
     if (hwptr_peekb(fb, i*1024*1024 - 1) == 0xAA) {
 | 
			
		||||
	SizeFound = i;
 | 
			
		||||
	break;
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* restore CRTCEXT3 state */
 | 
			
		||||
 mga_select();
 | 
			
		||||
 mga_outb(M_CRTC_EXT_INDEX, 3);
 | 
			
		||||
 mga_outb(M_CRTC_EXT_DATA, tmp);
 | 
			
		||||
 | 
			
		||||
 _destroy_mmap(&fb);
 | 
			
		||||
 | 
			
		||||
 return SizeFound*1024*1024;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Frees all resources allocated by MGA init code.
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
void mga_hw_fini (void)
 | 
			
		||||
{
 | 
			
		||||
 int i;
 | 
			
		||||
 | 
			
		||||
 pci_write_long(bus_id, 0x40, reg40);
 | 
			
		||||
 | 
			
		||||
 for (i=0; i<4; i++) {
 | 
			
		||||
     _destroy_mmap(&mgaptr.io_mem_map[i]);
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 _destroy_mmap(&mgaptr.linear_map);
 | 
			
		||||
 | 
			
		||||
#if !MGA_FARPTR
 | 
			
		||||
 if (dirty) {
 | 
			
		||||
    __djgpp_nearptr_disable();
 | 
			
		||||
    dirty = FALSE;
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 matrox_id = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Attempts to detect MGA.
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note: The first thing ever to be called. This is in charge of filling in
 | 
			
		||||
 *       the driver header with all the required information and function
 | 
			
		||||
 *       pointers. We do not yet have access to the video memory, so we can't
 | 
			
		||||
 *       talk directly to the card.
 | 
			
		||||
 */
 | 
			
		||||
int mga_hw_init (unsigned long *vram, int *interleave, char *name)
 | 
			
		||||
{
 | 
			
		||||
 int i;
 | 
			
		||||
 unsigned long pci_base[2];
 | 
			
		||||
 | 
			
		||||
 if (matrox_id) {
 | 
			
		||||
    return matrox_id;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
#if !MGA_FARPTR
 | 
			
		||||
 /* enable nearptr access */
 | 
			
		||||
 if (_crt0_startup_flags & _CRT0_FLAG_NEARPTR) {
 | 
			
		||||
    dirty = FALSE;
 | 
			
		||||
 } else {
 | 
			
		||||
    if (__djgpp_nearptr_enable() == 0)
 | 
			
		||||
       return NULL;
 | 
			
		||||
 | 
			
		||||
    dirty = TRUE;
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 /* find PCI device */
 | 
			
		||||
 matrox_id = 0;
 | 
			
		||||
 | 
			
		||||
 for (bus_id=0, i=0; matrox_id_list[i]; i++) {
 | 
			
		||||
     if (pci_find_device(matrox_id_list[i], MATROX_VENDOR_ID, 0, &bus_id)) {
 | 
			
		||||
	matrox_id = matrox_id_list[i];
 | 
			
		||||
	break;
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* set up the card name */
 | 
			
		||||
 switch (matrox_id) {
 | 
			
		||||
	case MATROX_MILL_ID:
 | 
			
		||||
	     if (name) strcpy(name, "Millennium");
 | 
			
		||||
	     break;
 | 
			
		||||
        default:
 | 
			
		||||
             matrox_id = 0;
 | 
			
		||||
             return -1;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 reg40 = pci_read_long(bus_id, 0x40);
 | 
			
		||||
#if 0 /* overclock a little :) */
 | 
			
		||||
 {
 | 
			
		||||
  int rfhcnt = (reg40 >> 16) & 0xF;
 | 
			
		||||
  if ((reg40 & 0x200000) && (rfhcnt < 0xC)) {
 | 
			
		||||
     pci_write_long(bus_id, 0x40, (reg40 & 0xFFF0FFFF) | 0x000C0000);
 | 
			
		||||
  }
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 /* read hardware configuration data */
 | 
			
		||||
 for (i=0; i<2; i++)
 | 
			
		||||
     pci_base[i] = pci_read_long(bus_id, 16+i*4);
 | 
			
		||||
 | 
			
		||||
 /* work out the linear framebuffer and MMIO addresses */
 | 
			
		||||
 if (matrox_id == MATROX_MILL_ID) {
 | 
			
		||||
    if (pci_base[0])
 | 
			
		||||
       io_mem_base[0] = pci_base[0] & 0xFFFFC000;
 | 
			
		||||
 | 
			
		||||
    if (pci_base[1])
 | 
			
		||||
       linear_base = pci_base[1] & 0xFF800000;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (!linear_base || !io_mem_base[0])
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
 /* deal with the memory mapping crap */
 | 
			
		||||
 io_mem_size[0] = 0x4000;
 | 
			
		||||
 | 
			
		||||
 for (i=0; i<4; i++) {
 | 
			
		||||
     if (io_mem_base[i]) {
 | 
			
		||||
        if (_create_mmap(&mgaptr.io_mem_map[i], io_mem_base[i], io_mem_size[i])) {
 | 
			
		||||
	   mga_hw_fini();
 | 
			
		||||
	   return NULL;
 | 
			
		||||
	}
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 *vram = linear_size = _mga_get_vram(matrox_id, linear_base);
 | 
			
		||||
 | 
			
		||||
 if (_create_mmap(&mgaptr.linear_map, linear_base, linear_size)) {
 | 
			
		||||
    mga_hw_fini();
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* fill in user data */
 | 
			
		||||
 *interleave = linear_size > 2*1024*1024;
 | 
			
		||||
 | 
			
		||||
 return matrox_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* PCI routines added by SET */
 | 
			
		||||
#define PCIAddr   0xCF8
 | 
			
		||||
#define PCIData   0xCFC
 | 
			
		||||
#define PCIEnable 0x80000000
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* FindPCIDevice:
 | 
			
		||||
 *  Replacement for the INT 1A - PCI BIOS v2.0c+ - FIND PCI DEVICE, AX = B102h
 | 
			
		||||
 *
 | 
			
		||||
 *  Note: deviceIndex is because a card can hold more than one PCI chip.
 | 
			
		||||
 * 
 | 
			
		||||
 *  Searches the board of the vendor supplied in vendorID with 
 | 
			
		||||
 *  identification number deviceID and index deviceIndex (normally 0). 
 | 
			
		||||
 *  The value returned in handle can be used to access the PCI registers 
 | 
			
		||||
 *  of this board.
 | 
			
		||||
 *
 | 
			
		||||
 *  Return: 1 if found 0 if not found.
 | 
			
		||||
 */
 | 
			
		||||
static int pci_find_device (int deviceID, int vendorID, int deviceIndex, int *handle)
 | 
			
		||||
{
 | 
			
		||||
 int model, vendor, card, device;
 | 
			
		||||
 unsigned value, full_id, bus, busMax;
 | 
			
		||||
 | 
			
		||||
 deviceIndex <<= 8;
 | 
			
		||||
 | 
			
		||||
 /* for each PCI bus */
 | 
			
		||||
 for (bus=0, busMax=0x10000; bus<busMax; bus+=0x10000) {
 | 
			
		||||
 | 
			
		||||
     /* for each hardware device */
 | 
			
		||||
     for (device=0, card=0; card<32; card++, device+=0x800) {
 | 
			
		||||
	 value = PCIEnable | bus | deviceIndex | device;
 | 
			
		||||
	 outportl(PCIAddr, value);
 | 
			
		||||
	 full_id = inportl(PCIData);
 | 
			
		||||
 | 
			
		||||
	 /* get the vendor and model ID */
 | 
			
		||||
	 vendor = full_id & 0xFFFF;
 | 
			
		||||
	 model = full_id >> 16;
 | 
			
		||||
 | 
			
		||||
	 if (vendor != 0xFFFF) {
 | 
			
		||||
	    /* is this the one we want? */
 | 
			
		||||
	    if ((deviceID == model) && (vendorID == vendor)) {
 | 
			
		||||
	       *handle = value;
 | 
			
		||||
	       return 1;
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	    /* is it a bridge to a secondary bus? */
 | 
			
		||||
	    outportl(PCIAddr, value | 8);
 | 
			
		||||
 | 
			
		||||
	    if (((inportl(PCIData) >> 16) == 0x0600) || (full_id==0x00011011))
 | 
			
		||||
	       busMax += 0x10000;
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc:
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
static unsigned long pci_read_long (int handle, int index)
 | 
			
		||||
{
 | 
			
		||||
 outportl(PCIAddr, PCIEnable | handle | index);
 | 
			
		||||
 return inportl(PCIData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc:
 | 
			
		||||
 *
 | 
			
		||||
 * In  :
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
static void pci_write_long (int handle, int index, unsigned long value)
 | 
			
		||||
{
 | 
			
		||||
 outportl(PCIAddr, PCIEnable | handle | index);
 | 
			
		||||
 outportl(PCIData, value);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										113
									
								
								src/mesa/drivers/dos/mga/mga_hw.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/mesa/drivers/dos/mga/mga_hw.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W HW mapping
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef MGA_HW_included
 | 
			
		||||
#define MGA_HW_included
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* set this to zero to use near pointers */
 | 
			
		||||
#define MGA_FARPTR 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* access macros */
 | 
			
		||||
#if MGA_FARPTR
 | 
			
		||||
 | 
			
		||||
#include <sys/farptr.h>
 | 
			
		||||
 | 
			
		||||
#define hwptr_pokeb(ptr, off, val)     _farpokeb((ptr).selector, (ptr).offset32+(off), (val))
 | 
			
		||||
#define hwptr_pokew(ptr, off, val)     _farpokew((ptr).selector, (ptr).offset32+(off), (val))
 | 
			
		||||
#define hwptr_pokel(ptr, off, val)     _farpokel((ptr).selector, (ptr).offset32+(off), (val))
 | 
			
		||||
 | 
			
		||||
#define hwptr_peekb(ptr, off)          _farpeekb((ptr).selector, (ptr).offset32+(off))
 | 
			
		||||
#define hwptr_peekw(ptr, off)          _farpeekw((ptr).selector, (ptr).offset32+(off))
 | 
			
		||||
#define hwptr_peekl(ptr, off)          _farpeekl((ptr).selector, (ptr).offset32+(off))
 | 
			
		||||
 | 
			
		||||
#define hwptr_select(ptr)              _farsetsel((ptr).selector)
 | 
			
		||||
#define hwptr_unselect(ptr)            (ptr).selector = _fargetsel()
 | 
			
		||||
 | 
			
		||||
#define hwptr_nspokeb(ptr, off, val)   _farnspokeb((ptr).offset32+(off), (val))
 | 
			
		||||
#define hwptr_nspokew(ptr, off, val)   _farnspokew((ptr).offset32+(off), (val))
 | 
			
		||||
#define hwptr_nspokel(ptr, off, val)   _farnspokel((ptr).offset32+(off), (val))
 | 
			
		||||
 | 
			
		||||
#define hwptr_nspeekb(ptr, off)        _farnspeekb((ptr).offset32+(off))
 | 
			
		||||
#define hwptr_nspeekw(ptr, off)        _farnspeekw((ptr).offset32+(off))
 | 
			
		||||
#define hwptr_nspeekl(ptr, off)        _farnspeekl((ptr).offset32+(off))
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define hwptr_pokeb(ptr, off, val)     *((volatile unsigned char *)((ptr).offset32+(off))) = (val)
 | 
			
		||||
#define hwptr_pokew(ptr, off, val)     *((volatile unsigned short *)((ptr).offset32+(off))) = (val)
 | 
			
		||||
#define hwptr_pokel(ptr, off, val)     *((volatile unsigned long *)((ptr).offset32+(off))) = (val)
 | 
			
		||||
 | 
			
		||||
#define hwptr_peekb(ptr, off)          (*((volatile unsigned char *)((ptr).offset32+(off))))
 | 
			
		||||
#define hwptr_peekw(ptr, off)          (*((volatile unsigned short *)((ptr).offset32+(off))))
 | 
			
		||||
#define hwptr_peekl(ptr, off)          (*((volatile unsigned long *)((ptr).offset32+(off))))
 | 
			
		||||
 | 
			
		||||
#define hwptr_select(ptr)
 | 
			
		||||
#define hwptr_unselect(ptr)
 | 
			
		||||
 | 
			
		||||
#define hwptr_nspokeb(ptr, off, val)   *((volatile unsigned char *)((ptr).offset32+(off))) = (val)
 | 
			
		||||
#define hwptr_nspokew(ptr, off, val)   *((volatile unsigned short *)((ptr).offset32+(off))) = (val)
 | 
			
		||||
#define hwptr_nspokel(ptr, off, val)   *((volatile unsigned long *)((ptr).offset32+(off))) = (val)
 | 
			
		||||
 | 
			
		||||
#define hwptr_nspeekb(ptr, off)        (*((volatile unsigned char *)((ptr).offset32+(off))))
 | 
			
		||||
#define hwptr_nspeekw(ptr, off)        (*((volatile unsigned short *)((ptr).offset32+(off))))
 | 
			
		||||
#define hwptr_nspeekl(ptr, off)        (*((volatile unsigned long *)((ptr).offset32+(off))))
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* helpers for accessing the Matrox registers */
 | 
			
		||||
#define mga_select()          hwptr_select(mgaptr.io_mem_map[0])
 | 
			
		||||
#define mga_inb(addr)         hwptr_nspeekb(mgaptr.io_mem_map[0], addr)
 | 
			
		||||
#define mga_inw(addr)         hwptr_nspeekw(mgaptr.io_mem_map[0], addr)
 | 
			
		||||
#define mga_inl(addr)         hwptr_nspeekl(mgaptr.io_mem_map[0], addr)
 | 
			
		||||
#define mga_outb(addr, val)   hwptr_nspokeb(mgaptr.io_mem_map[0], addr, val)
 | 
			
		||||
#define mga_outw(addr, val)   hwptr_nspokew(mgaptr.io_mem_map[0], addr, val)
 | 
			
		||||
#define mga_outl(addr, val)   hwptr_nspokel(mgaptr.io_mem_map[0], addr, val)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef struct MGA_HWPTR {
 | 
			
		||||
        __dpmi_paddr io_mem_map[4], linear_map;
 | 
			
		||||
} MGA_HWPTR;
 | 
			
		||||
 | 
			
		||||
extern MGA_HWPTR mgaptr;
 | 
			
		||||
 | 
			
		||||
void mga_hw_fini (void);
 | 
			
		||||
int mga_hw_init (unsigned long *vram, int *interleave, char *name);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										231
									
								
								src/mesa/drivers/dos/mga/mga_mode.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								src/mesa/drivers/dos/mga/mga_mode.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W mode switching
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <dpmi.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stubinfo.h>
 | 
			
		||||
#include <sys/exceptn.h>
 | 
			
		||||
#include <sys/farptr.h>
 | 
			
		||||
#include <sys/movedata.h>
 | 
			
		||||
#include <sys/segments.h>
 | 
			
		||||
 | 
			
		||||
#include "../internal.h"
 | 
			
		||||
#include "mga_mode.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static MGA_MODE oldmode;
 | 
			
		||||
static MGA_MODE modes[64];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * VESA info
 | 
			
		||||
 */
 | 
			
		||||
#define V_SIGN     0
 | 
			
		||||
#define V_MINOR    4
 | 
			
		||||
#define V_MAJOR    5
 | 
			
		||||
#define V_OEM_OFS  6
 | 
			
		||||
#define V_OEM_SEG  8
 | 
			
		||||
#define V_MODE_OFS 14
 | 
			
		||||
#define V_MODE_SEG 16
 | 
			
		||||
#define V_MEMORY   18
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * mode info
 | 
			
		||||
 */
 | 
			
		||||
#define M_ATTR     0
 | 
			
		||||
#define M_GRAN     4
 | 
			
		||||
#define M_SCANLEN  16
 | 
			
		||||
#define M_XRES     18
 | 
			
		||||
#define M_YRES     20
 | 
			
		||||
#define M_BPP      25
 | 
			
		||||
#define M_RED      31
 | 
			
		||||
#define M_GREEN    33
 | 
			
		||||
#define M_BLUE     35
 | 
			
		||||
#define M_PHYS_PTR 40
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: get available modes
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : linear modes list ptr
 | 
			
		||||
 *
 | 
			
		||||
 * Note: shouldn't use VESA...
 | 
			
		||||
 */
 | 
			
		||||
static MGA_MODE *_mga_mode_check (void)
 | 
			
		||||
{
 | 
			
		||||
 __dpmi_regs r;
 | 
			
		||||
 word16 *p;
 | 
			
		||||
 MGA_MODE *q;
 | 
			
		||||
 char vesa_info[512], tmp[512];
 | 
			
		||||
 | 
			
		||||
 _farpokel(_stubinfo->ds_selector, 0, 0x32454256);
 | 
			
		||||
 r.x.ax = 0x4f00;
 | 
			
		||||
 r.x.di = 0;
 | 
			
		||||
 r.x.es = _stubinfo->ds_segment;
 | 
			
		||||
 __dpmi_int(0x10, &r);
 | 
			
		||||
 movedata(_stubinfo->ds_selector, 0, _my_ds(), (unsigned)vesa_info, 512);
 | 
			
		||||
 if ((r.x.ax!=0x004f) || ((_32_ vesa_info[V_SIGN])!=0x41534556)) {
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 p = (word16 *)(((_16_ vesa_info[V_MODE_SEG])<<4) + (_16_ vesa_info[V_MODE_OFS]));
 | 
			
		||||
 q = modes;
 | 
			
		||||
 do {
 | 
			
		||||
     if ((q->mode=_farpeekw(__djgpp_dos_sel, (unsigned long)(p++)))==0xffff) {
 | 
			
		||||
        break;
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
     r.x.ax = 0x4f01;
 | 
			
		||||
     r.x.cx = q->mode;
 | 
			
		||||
     r.x.di = 512;
 | 
			
		||||
     r.x.es = _stubinfo->ds_segment;
 | 
			
		||||
     __dpmi_int(0x10, &r);
 | 
			
		||||
     movedata(_stubinfo->ds_selector, 512, _my_ds(), (unsigned)tmp, 256);
 | 
			
		||||
     switch (tmp[M_BPP]) {
 | 
			
		||||
            case 16:
 | 
			
		||||
                 q->bpp = tmp[M_RED] + tmp[M_GREEN] + tmp[M_BLUE];
 | 
			
		||||
                 break;
 | 
			
		||||
            case 8:
 | 
			
		||||
            case 15:
 | 
			
		||||
            case 24:
 | 
			
		||||
            case 32:
 | 
			
		||||
                 q->bpp = tmp[M_BPP];
 | 
			
		||||
                 break;
 | 
			
		||||
            default:
 | 
			
		||||
                 q->bpp = 0;
 | 
			
		||||
     }
 | 
			
		||||
     if ((r.x.ax==0x004f) && ((tmp[M_ATTR]&0x11)==0x11) && q->bpp && (tmp[M_ATTR]&0x80)) {
 | 
			
		||||
        q->xres = _16_ tmp[M_XRES];
 | 
			
		||||
        q->yres = _16_ tmp[M_YRES];
 | 
			
		||||
        q->mode |= 0x4000;
 | 
			
		||||
        q++;
 | 
			
		||||
     }
 | 
			
		||||
 } while (TRUE);
 | 
			
		||||
 | 
			
		||||
 return modes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: save current mode
 | 
			
		||||
 *
 | 
			
		||||
 * In  : ptr to mode structure
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: shouldn't use VESA...
 | 
			
		||||
 */
 | 
			
		||||
static int _mga_mode_save (MGA_MODE *p)
 | 
			
		||||
{
 | 
			
		||||
 __asm("\n\
 | 
			
		||||
		movw	$0x4f03, %%ax	\n\
 | 
			
		||||
		int	$0x10		\n\
 | 
			
		||||
		movl	%%ebx, %0	\n\
 | 
			
		||||
 ":"=g"(p->mode)::"%eax", "%ebx");
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: switch to specified mode
 | 
			
		||||
 *
 | 
			
		||||
 * In  : ptr to mode structure, refresh rate
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: shouldn't use VESA...
 | 
			
		||||
 */
 | 
			
		||||
int mga_mode_switch (MGA_MODE *p, int refresh)
 | 
			
		||||
{
 | 
			
		||||
 if (oldmode.mode == 0) {
 | 
			
		||||
    _mga_mode_save(&oldmode);
 | 
			
		||||
 }
 | 
			
		||||
 __asm("movw $0x4f02, %%ax; int  $0x10"::"b"(p->mode):"%eax");
 | 
			
		||||
 return 0;
 | 
			
		||||
 | 
			
		||||
 (void)refresh; /* silence compiler warning */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: restore to the mode prior to first call to `mga_switch'
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: shouldn't use VESA...
 | 
			
		||||
 */
 | 
			
		||||
int mga_mode_restore (void)
 | 
			
		||||
{
 | 
			
		||||
 if (oldmode.mode != 0) {
 | 
			
		||||
    __asm("movw $0x4f02, %%ax; int  $0x10"::"b"(oldmode.mode):"%eax");
 | 
			
		||||
    oldmode.mode = 0;
 | 
			
		||||
 }
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: return suitable mode
 | 
			
		||||
 *
 | 
			
		||||
 * In  : width, height, bpp
 | 
			
		||||
 * Out : ptr to mode structure
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
MGA_MODE *mga_mode_find (int width, int height, int bpp)
 | 
			
		||||
{
 | 
			
		||||
 static MGA_MODE *q = NULL;
 | 
			
		||||
 | 
			
		||||
 MGA_MODE *p;
 | 
			
		||||
 unsigned int min;
 | 
			
		||||
 | 
			
		||||
 if (q == NULL) {
 | 
			
		||||
    if ((q = _mga_mode_check()) == NULL) {
 | 
			
		||||
       return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* search for a mode that fits our request */
 | 
			
		||||
 for (min=-1, p=NULL; q->mode!=0xffff; q++) {
 | 
			
		||||
     if ((q->xres>=width) && (q->yres>=height) && (q->bpp==bpp)) {
 | 
			
		||||
        if (min>=(unsigned)(q->xres*q->yres)) {
 | 
			
		||||
           min = q->xres*q->yres;
 | 
			
		||||
           p = q;
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return p;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								src/mesa/drivers/dos/mga/mga_mode.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/mesa/drivers/dos/mga/mga_mode.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W mode switching
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef MGA_MODE_included
 | 
			
		||||
#define MGA_MODE_included
 | 
			
		||||
 | 
			
		||||
typedef struct MGA_MODE {
 | 
			
		||||
        int mode;
 | 
			
		||||
        int xres, yres;
 | 
			
		||||
        int bpp;
 | 
			
		||||
} MGA_MODE;
 | 
			
		||||
 | 
			
		||||
int mga_mode_switch (MGA_MODE *p, int refresh);
 | 
			
		||||
int mga_mode_restore (void);
 | 
			
		||||
MGA_MODE *mga_mode_find (int width, int height, int bpp);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										207
									
								
								src/mesa/drivers/dos/mga/mga_reg.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								src/mesa/drivers/dos/mga/mga_reg.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,207 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  5.0
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999-2002  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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa  --  MGA2064W register mnemonics
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2003 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef MGA_REG_H_included
 | 
			
		||||
#define MGA_REG_H_included
 | 
			
		||||
 | 
			
		||||
/* Matrox hardware registers: */
 | 
			
		||||
#define M_AR0                 0x1C60
 | 
			
		||||
#define M_AR1                 0x1C64
 | 
			
		||||
#define M_AR2                 0x1C68
 | 
			
		||||
#define M_AR3                 0x1C6C
 | 
			
		||||
#define M_AR4                 0x1C70
 | 
			
		||||
#define M_AR5                 0x1C74
 | 
			
		||||
#define M_AR6                 0x1C78
 | 
			
		||||
#define M_BCOL                0x1C20
 | 
			
		||||
#define M_CXBNDRY             0x1C80
 | 
			
		||||
#define M_CXLEFT              0x1CA0
 | 
			
		||||
#define M_CXRIGHT             0x1CA4
 | 
			
		||||
#define M_DR0                 0x1CC0
 | 
			
		||||
#define M_DR2                 0x1CC8
 | 
			
		||||
#define M_DR3                 0x1CCC
 | 
			
		||||
#define M_DR4                 0x1CD0
 | 
			
		||||
#define M_DR6                 0x1CD8
 | 
			
		||||
#define M_DR7                 0x1CDC
 | 
			
		||||
#define M_DR8                 0x1CE0
 | 
			
		||||
#define M_DR10                0x1CE8
 | 
			
		||||
#define M_DR11                0x1CEC
 | 
			
		||||
#define M_DR12                0x1CF0
 | 
			
		||||
#define M_DR14                0x1CF8
 | 
			
		||||
#define M_DR15                0x1CFC
 | 
			
		||||
#define M_DWGCTL              0x1C00
 | 
			
		||||
#define M_FCOL                0x1C24
 | 
			
		||||
#define M_FIFOSTATUS          0x1E10
 | 
			
		||||
#define M_FXBNDRY             0x1C84
 | 
			
		||||
#define M_FXLEFT              0x1CA8
 | 
			
		||||
#define M_FXRIGHT             0x1CAC
 | 
			
		||||
#define M_ICLEAR              0x1E18
 | 
			
		||||
#define M_IEN                 0x1E1C
 | 
			
		||||
#define M_LEN                 0x1C5C
 | 
			
		||||
#define M_MACCESS             0x1C04
 | 
			
		||||
#define M_OPMODE              0x1E54
 | 
			
		||||
#define M_PAT0                0x1C10
 | 
			
		||||
#define M_PAT1                0x1C14
 | 
			
		||||
#define M_PITCH               0x1C8C
 | 
			
		||||
#define M_PLNWT               0x1C1C
 | 
			
		||||
#define M_RESET               0x1E40
 | 
			
		||||
#define M_SGN                 0x1C58
 | 
			
		||||
#define M_SHIFT               0x1C50
 | 
			
		||||
#define M_SRC0                0x1C30
 | 
			
		||||
#define M_SRC1                0x1C34
 | 
			
		||||
#define M_SRC2                0x1C38
 | 
			
		||||
#define M_SRC3                0x1C3C
 | 
			
		||||
#define M_STATUS              0x1E14
 | 
			
		||||
#define M_VCOUNT              0x1E20
 | 
			
		||||
#define M_XDST                0x1CB0
 | 
			
		||||
#define M_XYEND               0x1C44
 | 
			
		||||
#define M_XYSTRT              0x1C40
 | 
			
		||||
#define M_YBOT                0x1C9C
 | 
			
		||||
#define M_YDST                0x1C90
 | 
			
		||||
#define M_YDSTLEN             0x1C88
 | 
			
		||||
#define M_YDSTORG             0x1C94
 | 
			
		||||
#define M_YTOP                0x1C98
 | 
			
		||||
#define M_ZORG                0x1C0C
 | 
			
		||||
 | 
			
		||||
#define M_EXEC                0x0100
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: opcod */
 | 
			
		||||
#define M_DWG_LINE_OPEN       0x0
 | 
			
		||||
#define M_DWG_AUTOLINE_OPEN   0x1
 | 
			
		||||
#define M_DWG_LINE_CLOSE      0x2
 | 
			
		||||
#define M_DWG_AUTOLINE_CLOSE  0x3
 | 
			
		||||
#define M_DWG_TRAP            0x4
 | 
			
		||||
#define M_DWG_TEXTURE_TRAP    0x5
 | 
			
		||||
#define M_DWG_BITBLT          0x8
 | 
			
		||||
#define M_DWG_FBITBLT         0xC
 | 
			
		||||
#define M_DWG_ILOAD           0x9
 | 
			
		||||
#define M_DWG_ILOAD_SCALE     0xD
 | 
			
		||||
#define M_DWG_ILOAD_FILTER    0xF
 | 
			
		||||
#define M_DWG_IDUMP           0xA
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: atype */
 | 
			
		||||
#define M_DWG_RPL             (0x0 << 4)
 | 
			
		||||
#define M_DWG_RSTR            (0x1 << 4)
 | 
			
		||||
#define M_DWG_ZI              (0x3 << 4)
 | 
			
		||||
#define M_DWG_BLK             (0x4 << 4)
 | 
			
		||||
#define M_DWG_I               (0x7 << 4)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: linear */
 | 
			
		||||
#define M_DWG_LINEAR          (0x1 << 7)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: zmode */
 | 
			
		||||
#define M_DWG_NOZCMP          (0x0 << 8)
 | 
			
		||||
#define M_DWG_ZE              (0x2 << 8)
 | 
			
		||||
#define M_DWG_ZNE             (0x3 << 8)
 | 
			
		||||
#define M_DWG_ZLT             (0x4 << 8)
 | 
			
		||||
#define M_DWG_ZLTE            (0x5 << 8)
 | 
			
		||||
#define M_DWG_ZGT             (0x6 << 8)
 | 
			
		||||
#define M_DWG_ZGTE            (0x7 << 8)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: solid */
 | 
			
		||||
#define M_DWG_SOLID           (0x1 << 11)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: arzero */
 | 
			
		||||
#define M_DWG_ARZERO          (0x1 << 12)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: sgnzero */
 | 
			
		||||
#define M_DWG_SGNZERO         (0x1 << 13)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: shiftzero */
 | 
			
		||||
#define M_DWG_SHFTZERO        (0x1 << 14)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: bop */
 | 
			
		||||
#define M_DWG_BOP_XOR         (0x6 << 16)
 | 
			
		||||
#define M_DWG_BOP_AND         (0x8 << 16)
 | 
			
		||||
#define M_DWG_BOP_SRC         (0xC << 16)
 | 
			
		||||
#define M_DWG_BOP_OR          (0xE << 16)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: trans */
 | 
			
		||||
#define M_DWG_TRANS_0         (0x0 << 20)
 | 
			
		||||
#define M_DWG_TRANS_1         (0x1 << 20)
 | 
			
		||||
#define M_DWG_TRANS_2         (0x2 << 20)
 | 
			
		||||
#define M_DWG_TRANS_3         (0x3 << 20)
 | 
			
		||||
#define M_DWG_TRANS_4         (0x4 << 20)
 | 
			
		||||
#define M_DWG_TRANS_5         (0x5 << 20)
 | 
			
		||||
#define M_DWG_TRANS_6         (0x6 << 20)
 | 
			
		||||
#define M_DWG_TRANS_7         (0x7 << 20)
 | 
			
		||||
#define M_DWG_TRANS_8         (0x8 << 20)
 | 
			
		||||
#define M_DWG_TRANS_9         (0x9 << 20)
 | 
			
		||||
#define M_DWG_TRANS_A         (0xA << 20)
 | 
			
		||||
#define M_DWG_TRANS_B         (0xB << 20)
 | 
			
		||||
#define M_DWG_TRANS_C         (0xC << 20)
 | 
			
		||||
#define M_DWG_TRANS_D         (0xD << 20)
 | 
			
		||||
#define M_DWG_TRANS_E         (0xE << 20)
 | 
			
		||||
#define M_DWG_TRANS_F         (0xF << 20)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: bltmod */
 | 
			
		||||
#define M_DWG_BMONOLEF        (0x0 << 25)
 | 
			
		||||
#define M_DWG_BMONOWF         (0x4 << 25)
 | 
			
		||||
#define M_DWG_BPLAN           (0x1 << 25)
 | 
			
		||||
#define M_DWG_BFCOL           (0x2 << 25)
 | 
			
		||||
#define M_DWG_BUYUV           (0xE << 25)
 | 
			
		||||
#define M_DWG_BU32BGR         (0x3 << 25)
 | 
			
		||||
#define M_DWG_BU32RGB         (0x7 << 25)
 | 
			
		||||
#define M_DWG_BU24BGR         (0xB << 25)
 | 
			
		||||
#define M_DWG_BU24RGB         (0xF << 25)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: pattern */
 | 
			
		||||
#define M_DWG_PATTERN         (0x1 << 29)
 | 
			
		||||
 | 
			
		||||
/* DWGCTL: transc */
 | 
			
		||||
#define M_DWG_TRANSC          (0x1 << 30)
 | 
			
		||||
 | 
			
		||||
/* OPMODE: */
 | 
			
		||||
#define M_DMA_GENERAL         (0x0 << 2)
 | 
			
		||||
#define M_DMA_BLIT            (0x1 << 2)
 | 
			
		||||
#define M_DMA_VECTOR          (0x2 << 2)
 | 
			
		||||
 | 
			
		||||
/* SGN: */
 | 
			
		||||
#define M_SDXL                (0x1 << 1)
 | 
			
		||||
#define M_SDXR                (0x1 << 5)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* VGAREG */
 | 
			
		||||
#define M_CRTC_INDEX          0x1FD4
 | 
			
		||||
#define M_CRTC_DATA           0x1FD5
 | 
			
		||||
 | 
			
		||||
#define M_CRTC_EXT_INDEX      0x1FDE
 | 
			
		||||
#define M_CRTC_EXT_DATA       0x1FDF
 | 
			
		||||
 | 
			
		||||
#define M_MISC_R              0x1FCC
 | 
			
		||||
#define M_MISC_W              0x1FC2
 | 
			
		||||
 | 
			
		||||
/* CRTCEXT3: */
 | 
			
		||||
#define M_MGAMODE             (0x1 << 7)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.2 for Mesa 4.1
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -32,24 +32,30 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <dpmi.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <pc.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stubinfo.h>
 | 
			
		||||
#include <sys/exceptn.h>
 | 
			
		||||
#include <sys/segments.h>
 | 
			
		||||
#include <sys/farptr.h>
 | 
			
		||||
#include <sys/movedata.h>
 | 
			
		||||
 | 
			
		||||
#include "video.h"
 | 
			
		||||
#include "vesa.h"
 | 
			
		||||
#include "../dpmiint.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static vl_mode modes[64];
 | 
			
		||||
static vl_mode modes[128];
 | 
			
		||||
 | 
			
		||||
static word16 vesa_ver;
 | 
			
		||||
static int banked_selector, linear_selector;
 | 
			
		||||
static int oldmode = -1;
 | 
			
		||||
 | 
			
		||||
static int vesa_color_precision = 6;
 | 
			
		||||
 | 
			
		||||
static word16 *vesa_pmcode;
 | 
			
		||||
unsigned int vesa_gran_mask, vesa_gran_shift;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -100,11 +106,14 @@ typedef struct CRTCInfoBlock {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vesa_init:
 | 
			
		||||
 *  Attempts to detect VESA, check video modes and create selectors.
 | 
			
		||||
 *  Returns 0 if error.
 | 
			
		||||
/* Desc: Attempts to detect VESA, check video modes and create selectors.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : mode array
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static word16 vesa_init (void)
 | 
			
		||||
static vl_mode *vesa_init (void)
 | 
			
		||||
{
 | 
			
		||||
 __dpmi_regs r;
 | 
			
		||||
 word16 *p;
 | 
			
		||||
@@ -114,7 +123,7 @@ static word16 vesa_init (void)
 | 
			
		||||
 word32 linearfb = 0;
 | 
			
		||||
 | 
			
		||||
 if (vesa_ver) {
 | 
			
		||||
    return vesa_ver;
 | 
			
		||||
    return modes;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 _farpokel(_stubinfo->ds_selector, 0, 0x32454256);
 | 
			
		||||
@@ -124,7 +133,7 @@ static word16 vesa_init (void)
 | 
			
		||||
 __dpmi_int(0x10, &r);
 | 
			
		||||
 movedata(_stubinfo->ds_selector, 0, _my_ds(), (unsigned)vesa_info, 512);
 | 
			
		||||
 if ((r.x.ax!=0x004f) || ((_32_ vesa_info[V_SIGN])!=0x41534556)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 p = (word16 *)(((_16_ vesa_info[V_MODE_SEG])<<4) + (_16_ vesa_info[V_MODE_OFS]));
 | 
			
		||||
@@ -144,6 +153,7 @@ static word16 vesa_init (void)
 | 
			
		||||
            case 16:
 | 
			
		||||
                 q->bpp = tmp[M_RED] + tmp[M_GREEN] + tmp[M_BLUE];
 | 
			
		||||
                 break;
 | 
			
		||||
            case 8:
 | 
			
		||||
            case 15:
 | 
			
		||||
            case 24:
 | 
			
		||||
            case 32:
 | 
			
		||||
@@ -175,54 +185,78 @@ static word16 vesa_init (void)
 | 
			
		||||
 } while (TRUE);
 | 
			
		||||
 | 
			
		||||
 if (q==modes) {
 | 
			
		||||
    return 0;
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 if (linearfb) {
 | 
			
		||||
    maxsize = ((maxsize+0xfffUL)&~0xfffUL);
 | 
			
		||||
    if (_create_selector(&linear_selector, linearfb, maxsize)) {
 | 
			
		||||
       return 0;
 | 
			
		||||
       return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 if (_create_selector(&banked_selector, 0xa0000, modes[0].gran)) {
 | 
			
		||||
    _remove_selector(&linear_selector);
 | 
			
		||||
    return 0;
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 for (q=modes; q->mode!=0xffff; q++) {
 | 
			
		||||
     q->sel = (q->mode&0x4000) ? linear_selector : banked_selector;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return (vesa_ver = _16_ vesa_info[V_MINOR]);
 | 
			
		||||
 if (vesa_info[V_MAJOR] >= 2) {
 | 
			
		||||
    r.x.ax = 0x4f0a;
 | 
			
		||||
    r.x.bx = 0;
 | 
			
		||||
    __dpmi_int(0x10, &r);
 | 
			
		||||
    if (r.x.ax == 0x004f) {
 | 
			
		||||
       vesa_pmcode = (word16 *)malloc(r.x.cx);
 | 
			
		||||
       movedata(__djgpp_dos_sel, (r.x.es << 4) + r.x.di, _my_ds(), (unsigned)vesa_pmcode, r.x.cx);
 | 
			
		||||
       if (vesa_pmcode[3]) {
 | 
			
		||||
          p = (word16 *)((long)vesa_pmcode + vesa_pmcode[3]);
 | 
			
		||||
          while (*p++ != 0xffff) ;
 | 
			
		||||
       } else {
 | 
			
		||||
          p = NULL;
 | 
			
		||||
       }
 | 
			
		||||
       if (p && (*p != 0xffff)) {
 | 
			
		||||
          free(vesa_pmcode);
 | 
			
		||||
          vesa_pmcode = NULL;
 | 
			
		||||
       } else {
 | 
			
		||||
          vesa_swbank = (void *)((long)vesa_pmcode + vesa_pmcode[0]);
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 vesa_ver = _16_ vesa_info[V_MINOR];
 | 
			
		||||
 return modes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vesa_finit:
 | 
			
		||||
 *  Frees all resources allocated by VESA init code.
 | 
			
		||||
/* Desc: Frees all resources allocated by VESA init code.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static void vesa_finit (void)
 | 
			
		||||
static void vesa_fini (void)
 | 
			
		||||
{
 | 
			
		||||
 if (vesa_ver) {
 | 
			
		||||
    _remove_selector(&linear_selector);
 | 
			
		||||
    _remove_selector(&banked_selector);
 | 
			
		||||
    if (vesa_pmcode != NULL) {
 | 
			
		||||
       free(vesa_pmcode);
 | 
			
		||||
       vesa_pmcode = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vesa_getmodes:
 | 
			
		||||
 *  Returns ptr to mode array.
 | 
			
		||||
 */
 | 
			
		||||
static vl_mode *vesa_getmodes (void)
 | 
			
		||||
{
 | 
			
		||||
 return (vesa_init() == 0) ? NULL : modes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* _closest_pixclk:
 | 
			
		||||
 *  Uses VESA 3.0 function 0x4F0B to find the closest pixel clock to the
 | 
			
		||||
 *  requested value.
 | 
			
		||||
/* Desc: Uses VESA 3.0 function 0x4F0B to find the closest pixel clock to the requested value.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : mode, clock
 | 
			
		||||
 * Out : desired clock
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static unsigned long _closest_pixclk (int mode_no, unsigned long vclk)
 | 
			
		||||
{
 | 
			
		||||
@@ -239,8 +273,12 @@ static unsigned long _closest_pixclk (int mode_no, unsigned long vclk)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* _crtc_timing:
 | 
			
		||||
 *  Calculates CRTC mode timings.
 | 
			
		||||
/* Desc: Calculates CRTC mode timings.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : crtc block, geometry, adjust
 | 
			
		||||
 * Out :
 | 
			
		||||
 *
 | 
			
		||||
 * Note:
 | 
			
		||||
 */
 | 
			
		||||
static void _crtc_timing (CRTCInfoBlock *crtc, int xres, int yres, int xadjust, int yadjust)
 | 
			
		||||
{
 | 
			
		||||
@@ -318,16 +356,28 @@ static void _crtc_timing (CRTCInfoBlock *crtc, int xres, int yres, int xadjust,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vesa_entermode:
 | 
			
		||||
 *  Attempts to enter specified video mode.
 | 
			
		||||
/* Desc: Attempts to enter specified video mode.
 | 
			
		||||
 *
 | 
			
		||||
 *  success: 0
 | 
			
		||||
 *  failure: !0
 | 
			
		||||
 * In  : ptr to mode structure, refresh rate
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static int vesa_entermode (vl_mode *p, int refresh)
 | 
			
		||||
{
 | 
			
		||||
 __dpmi_regs r;
 | 
			
		||||
 | 
			
		||||
 if (p->mode & 0x4000) {
 | 
			
		||||
    VESA.blit = _can_mmx() ? vesa_l_dump_virtual_mmx : vesa_l_dump_virtual;
 | 
			
		||||
 } else {
 | 
			
		||||
    VESA.blit = vesa_b_dump_virtual;
 | 
			
		||||
    { int n; for (vesa_gran_shift=0, n=p->gran; n; vesa_gran_shift++, n>>=1) ; }
 | 
			
		||||
    vesa_gran_mask = (1<<(--vesa_gran_shift)) - 1;
 | 
			
		||||
    if ((unsigned)p->gran != (vesa_gran_mask+1)) {
 | 
			
		||||
       return !0;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (oldmode == -1) {
 | 
			
		||||
    r.x.ax = 0x4f03;
 | 
			
		||||
    __dpmi_int(0x10, &r);
 | 
			
		||||
@@ -364,14 +414,33 @@ static int vesa_entermode (vl_mode *p, int refresh)
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 __dpmi_int(0x10, &r);
 | 
			
		||||
 if (r.x.ax != 0x004f) {
 | 
			
		||||
    return !0;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return (r.x.ax != 0x004f);
 | 
			
		||||
 if (p->bpp == 8) {
 | 
			
		||||
    r.x.ax = 0x4f08;
 | 
			
		||||
    r.x.bx = 0x0800;
 | 
			
		||||
    __dpmi_int(0x10, &r);
 | 
			
		||||
    if (r.x.ax == 0x004f) {
 | 
			
		||||
       r.x.ax = 0x4f08;
 | 
			
		||||
       r.h.bl = 0x01;
 | 
			
		||||
       __dpmi_int(0x10, &r);
 | 
			
		||||
       vesa_color_precision = r.h.bh;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vesa_restore:
 | 
			
		||||
 *  Restores to the mode prior to first call to vesa_entermode.
 | 
			
		||||
/* Desc: Restores to the mode prior to first call to vesa_entermode.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static void vesa_restore (void)
 | 
			
		||||
{
 | 
			
		||||
@@ -386,12 +455,79 @@ static void vesa_restore (void)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: set one palette entry
 | 
			
		||||
 *
 | 
			
		||||
 * In  : color index, R, G, B
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses integer values
 | 
			
		||||
 */
 | 
			
		||||
static void vesa_setCI_i (int index, int red, int green, int blue)
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
 __asm("\n\
 | 
			
		||||
		movw $0x1010, %%ax	\n\
 | 
			
		||||
		movb %1, %%dh		\n\
 | 
			
		||||
		movb %2, %%ch		\n\
 | 
			
		||||
		int  $0x10		\n\
 | 
			
		||||
 "::"b"(index), "m"(red), "m"(green), "c"(blue):"%eax", "%edx");
 | 
			
		||||
#else
 | 
			
		||||
 outportb(0x03C8, index);
 | 
			
		||||
 outportb(0x03C9, red);
 | 
			
		||||
 outportb(0x03C9, green);
 | 
			
		||||
 outportb(0x03C9, blue);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: set one palette entry
 | 
			
		||||
 *
 | 
			
		||||
 * In  : color index, R, G, B
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses normalized values
 | 
			
		||||
 */
 | 
			
		||||
static void vesa_setCI_f (int index, float red, float green, float blue)
 | 
			
		||||
{
 | 
			
		||||
 float max = (1 << vesa_color_precision) - 1;
 | 
			
		||||
 | 
			
		||||
 vesa_setCI_i(index, (int)(red * max), (int)(green * max), (int)(blue * max));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: state retrieval
 | 
			
		||||
 *
 | 
			
		||||
 * In  : parameter name, ptr to storage
 | 
			
		||||
 * Out : 0 if request successfully processed
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static int vesa_get (int pname, int *params)
 | 
			
		||||
{
 | 
			
		||||
 switch (pname) {
 | 
			
		||||
        case VL_GET_CI_PREC:
 | 
			
		||||
             params[0] = vesa_color_precision;
 | 
			
		||||
             break;
 | 
			
		||||
        default:
 | 
			
		||||
             return -1;
 | 
			
		||||
 }
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * the driver
 | 
			
		||||
 */
 | 
			
		||||
vl_driver VESA = {
 | 
			
		||||
          vesa_getmodes,
 | 
			
		||||
          vesa_init,
 | 
			
		||||
          vesa_entermode,
 | 
			
		||||
          NULL,
 | 
			
		||||
          vesa_setCI_f,
 | 
			
		||||
          vesa_setCI_i,
 | 
			
		||||
          vesa_get,
 | 
			
		||||
          vesa_restore,
 | 
			
		||||
          vesa_finit
 | 
			
		||||
          vesa_fini
 | 
			
		||||
};
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.1 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -34,9 +34,13 @@
 | 
			
		||||
#ifndef VESA_H_included
 | 
			
		||||
#define VESA_H_included
 | 
			
		||||
 | 
			
		||||
#include "../videoint.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
extern void *vesa_swbank;
 | 
			
		||||
 | 
			
		||||
extern void vesa_b_dump_virtual (void);
 | 
			
		||||
extern void vesa_l_dump_virtual (void);
 | 
			
		||||
extern void vesa_l_dump_virtual_mmx (void);
 | 
			
		||||
 | 
			
		||||
extern vl_driver VESA;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										235
									
								
								src/mesa/drivers/dos/vga.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								src/mesa/drivers/dos/vga.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,235 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Mesa 3-D graphics library
 | 
			
		||||
 * Version:  4.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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <pc.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "video.h"
 | 
			
		||||
#include "vga.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static vl_mode modes[] = {
 | 
			
		||||
       {0x13 | 0x4000, 320, 200, 320, 8, -1, 320*200},
 | 
			
		||||
       {0xffff, -1, -1, -1, -1, -1, -1}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static word16 vga_ver;
 | 
			
		||||
static int linear_selector;
 | 
			
		||||
static int oldmode = -1;
 | 
			
		||||
 | 
			
		||||
#define vga_color_precision 6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Attempts to detect VGA, check video modes and create selectors.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : mode array
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static vl_mode *vga_init (void)
 | 
			
		||||
{
 | 
			
		||||
 int rv = 0;
 | 
			
		||||
 | 
			
		||||
 if (vga_ver) {
 | 
			
		||||
    return modes;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 __asm("\n\
 | 
			
		||||
		movw	$0x1a00, %%ax	\n\
 | 
			
		||||
		int	$0x10		\n\
 | 
			
		||||
		cmpb	$0x1a, %%al	\n\
 | 
			
		||||
		jne	0f		\n\
 | 
			
		||||
		cmpb	$0x07, %%bl	\n\
 | 
			
		||||
		jb	0f		\n\
 | 
			
		||||
		andl	$0xff, %%ebx	\n\
 | 
			
		||||
		movl	%%ebx, %0	\n\
 | 
			
		||||
 0:":"=g"(rv)::"%eax", "%ebx");
 | 
			
		||||
 if (rv == 0) {
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if (_create_selector(&linear_selector, 0xa0000, 0x10000)) {
 | 
			
		||||
    return NULL;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 modes[0].sel = linear_selector;
 | 
			
		||||
 | 
			
		||||
 vga_ver = rv;
 | 
			
		||||
 return modes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Frees all resources allocated by VGA init code.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static void vga_fini (void)
 | 
			
		||||
{
 | 
			
		||||
 if (vga_ver) {
 | 
			
		||||
    _remove_selector(&linear_selector);
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Attempts to enter specified video mode.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : ptr to mode structure, refresh rate
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static int vga_entermode (vl_mode *p, int refresh)
 | 
			
		||||
{
 | 
			
		||||
 if (!(p->mode & 0x4000)) {
 | 
			
		||||
    return -1;
 | 
			
		||||
 }
 | 
			
		||||
 VGA.blit = _can_mmx() ? vesa_l_dump_virtual_mmx : vesa_l_dump_virtual;
 | 
			
		||||
 | 
			
		||||
 if (oldmode == -1) {
 | 
			
		||||
    __asm("\n\
 | 
			
		||||
		movb	$0x0f, %%ah	\n\
 | 
			
		||||
		int	$0x10		\n\
 | 
			
		||||
		andl	$0xff, %%eax	\n\
 | 
			
		||||
		movl	%%eax, %0	\n\
 | 
			
		||||
    ":"=g"(oldmode)::"%eax", "%ebx");
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 __asm("int $0x10"::"a"(p->mode&0xff));
 | 
			
		||||
 | 
			
		||||
 return 0;
 | 
			
		||||
 | 
			
		||||
 (void)refresh; /* silence compiler warning */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: Restores to the mode prior to first call to vga_entermode.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static void vga_restore (void)
 | 
			
		||||
{
 | 
			
		||||
 if (oldmode != -1) {
 | 
			
		||||
    __asm("int $0x10"::"a"(oldmode));
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: set one palette entry
 | 
			
		||||
 *
 | 
			
		||||
 * In  : color index, R, G, B
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses integer values
 | 
			
		||||
 */
 | 
			
		||||
static void vga_setCI_i (int index, int red, int green, int blue)
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
 __asm("\n\
 | 
			
		||||
		movw $0x1010, %%ax	\n\
 | 
			
		||||
		movb %1, %%dh		\n\
 | 
			
		||||
		movb %2, %%ch		\n\
 | 
			
		||||
		int  $0x10		\n\
 | 
			
		||||
 "::"b"(index), "m"(red), "m"(green), "c"(blue):"%eax", "%edx");
 | 
			
		||||
#else
 | 
			
		||||
 outportb(0x03C8, index);
 | 
			
		||||
 outportb(0x03C9, red);
 | 
			
		||||
 outportb(0x03C9, green);
 | 
			
		||||
 outportb(0x03C9, blue);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: set one palette entry
 | 
			
		||||
 *
 | 
			
		||||
 * In  : color index, R, G, B
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses normalized values
 | 
			
		||||
 */
 | 
			
		||||
static void vga_setCI_f (int index, float red, float green, float blue)
 | 
			
		||||
{
 | 
			
		||||
 float max = (1 << vga_color_precision) - 1;
 | 
			
		||||
 | 
			
		||||
 vga_setCI_i(index, (int)(red * max), (int)(green * max), (int)(blue * max));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: state retrieval
 | 
			
		||||
 *
 | 
			
		||||
 * In  : parameter name, ptr to storage
 | 
			
		||||
 * Out : 0 if request successfully processed
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static int vga_get (int pname, int *params)
 | 
			
		||||
{
 | 
			
		||||
 switch (pname) {
 | 
			
		||||
        case VL_GET_CI_PREC:
 | 
			
		||||
             params[0] = vga_color_precision;
 | 
			
		||||
             break;
 | 
			
		||||
        default:
 | 
			
		||||
             return -1;
 | 
			
		||||
 }
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * the driver
 | 
			
		||||
 */
 | 
			
		||||
vl_driver VGA = {
 | 
			
		||||
          vga_init,
 | 
			
		||||
          vga_entermode,
 | 
			
		||||
          NULL,
 | 
			
		||||
          vga_setCI_f,
 | 
			
		||||
          vga_setCI_i,
 | 
			
		||||
          vga_get,
 | 
			
		||||
          vga_restore,
 | 
			
		||||
          vga_fini
 | 
			
		||||
};
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.1 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
@@ -31,10 +31,12 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef DPMIINT_H_included
 | 
			
		||||
#define DPMIINT_H_included
 | 
			
		||||
#ifndef VGA_H_included
 | 
			
		||||
#define VGA_H_included
 | 
			
		||||
 | 
			
		||||
int _create_selector (int *segment, unsigned long base, int size);
 | 
			
		||||
void _remove_selector (int *segment);
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include "vesa.h"
 | 
			
		||||
 | 
			
		||||
extern vl_driver VGA;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -23,87 +23,129 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DOS/DJGPP device driver v1.1 for Mesa 4.0
 | 
			
		||||
 * DOS/DJGPP device driver v1.3 for Mesa
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 2002 - Borca Daniel
 | 
			
		||||
 *  Email : dborca@yahoo.com
 | 
			
		||||
 *  Web   : http://www.geocities.com/dborca
 | 
			
		||||
 *
 | 
			
		||||
 * Thanks to CrazyPyro (Neil Funk) for FakeColor
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include "vesa.h"
 | 
			
		||||
#include "vga.h"
 | 
			
		||||
#include "video.h"
 | 
			
		||||
#include "videoint.h"
 | 
			
		||||
#include "vesa/vesa.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static vl_driver *drv = &VESA;
 | 
			
		||||
/* card specific: valid forever */
 | 
			
		||||
word32 vl_hw_granularity;
 | 
			
		||||
static unsigned int gran_shift, gran_mask;
 | 
			
		||||
static vl_driver *drv;
 | 
			
		||||
/* based upon mode specific data: valid entire session */
 | 
			
		||||
int vl_video_selector;
 | 
			
		||||
static vl_mode *video_mode;
 | 
			
		||||
static int video_scanlen, video_bypp;
 | 
			
		||||
/* valid until next buffer */
 | 
			
		||||
void *vl_current_draw_buffer, *vl_current_read_buffer;
 | 
			
		||||
int vl_current_stride, vl_current_width, vl_current_height, vl_current_bytes;
 | 
			
		||||
int vl_current_offset, vl_current_delta;
 | 
			
		||||
static int current_width;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* lookup table for scaling 5 bit colors up to 8 bits */
 | 
			
		||||
static int _rgb_scale_5[32] = {
 | 
			
		||||
   0,   8,   16,  24,  32,  41,  49,  57,
 | 
			
		||||
   65,  74,  82,  90,  98,  106, 115, 123,
 | 
			
		||||
   131, 139, 148, 156, 164, 172, 180, 189,
 | 
			
		||||
   197, 205, 213, 222, 230, 238, 246, 255
 | 
			
		||||
   0,   8,   16,  25,  33,  41,  49,  58,
 | 
			
		||||
   66,  74,  82,  90,  99,  107, 115, 123,
 | 
			
		||||
   132, 140, 148, 156, 165, 173, 181, 189,
 | 
			
		||||
   197, 206, 214, 222, 230, 239, 247, 255
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* lookup table for scaling 6 bit colors up to 8 bits */
 | 
			
		||||
static int _rgb_scale_6[64] = {
 | 
			
		||||
   0,   4,   8,   12,  16,  20,  24,  28,
 | 
			
		||||
   32,  36,  40,  44,  48,  52,  56,  60,
 | 
			
		||||
   64,  68,  72,  76,  80,  85,  89,  93,
 | 
			
		||||
   32,  36,  40,  45,  49,  53,  57,  61,
 | 
			
		||||
   65,  69,  73,  77,  81,  85,  89,  93,
 | 
			
		||||
   97,  101, 105, 109, 113, 117, 121, 125,
 | 
			
		||||
   129, 133, 137, 141, 145, 149, 153, 157,
 | 
			
		||||
   161, 165, 170, 174, 178, 182, 186, 190,
 | 
			
		||||
   194, 198, 202, 206, 210, 214, 218, 222,
 | 
			
		||||
   226, 230, 234, 238, 242, 246, 250, 255
 | 
			
		||||
   130, 134, 138, 142, 146, 150, 154, 158,
 | 
			
		||||
   162, 166, 170, 174, 178, 182, 186, 190,
 | 
			
		||||
   194, 198, 202, 206, 210, 215, 219, 223,
 | 
			
		||||
   227, 231, 235, 239, 243, 247, 251, 255
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* FakeColor data */
 | 
			
		||||
#define R_CNT 6
 | 
			
		||||
#define G_CNT 6
 | 
			
		||||
#define B_CNT 6
 | 
			
		||||
 | 
			
		||||
#define R_BIAS 7
 | 
			
		||||
#define G_BIAS 7
 | 
			
		||||
#define B_BIAS 7
 | 
			
		||||
 | 
			
		||||
static word32 VGAPalette[256];
 | 
			
		||||
static word8 array_r[256];
 | 
			
		||||
static word8 array_g[256];
 | 
			
		||||
static word8 array_b[256];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void (*vl_clear) (void *buffer, int bytes, int color);
 | 
			
		||||
void (*vl_flip) (void *buffer, int stride, int height);
 | 
			
		||||
int (*vl_mixrgba) (const unsigned char rgba[]);
 | 
			
		||||
 | 
			
		||||
int (*vl_mixfix) (fixed r, fixed g, fixed b);
 | 
			
		||||
int (*vl_mixrgb) (const unsigned char rgb[]);
 | 
			
		||||
void (*vl_putpixel) (void *buffer, int offset, int color);
 | 
			
		||||
void (*vl_getrgba) (void *buffer, int offset, unsigned char rgba[4]);
 | 
			
		||||
int (*vl_mixrgba) (const unsigned char rgba[]);
 | 
			
		||||
void (*vl_getrgba) (unsigned int offset, unsigned char rgba[4]);
 | 
			
		||||
int (*vl_getpixel) (unsigned int offset);
 | 
			
		||||
void (*vl_clear) (int color);
 | 
			
		||||
void (*vl_rect) (int x, int y, int width, int height, int color);
 | 
			
		||||
void (*vl_flip) (void);
 | 
			
		||||
void (*vl_putpixel) (unsigned int offset, int color);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_rect:
 | 
			
		||||
 *  Clears a rectange with specified color.
 | 
			
		||||
/* Desc: color composition (w/o ALPHA)
 | 
			
		||||
 *
 | 
			
		||||
 * In  : R, G, B
 | 
			
		||||
 * Out : color
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
void vl_rect (void *buffer, int x, int y, int width, int height, int color)
 | 
			
		||||
static int vl_mixfix8fake (fixed r, fixed g, fixed b)
 | 
			
		||||
{
 | 
			
		||||
 int offset = y*current_width + x;
 | 
			
		||||
 int delta = current_width - width;
 | 
			
		||||
 | 
			
		||||
 for (y=0; y<height; y++) {
 | 
			
		||||
     for (x=0; x<width; x++, offset++) {
 | 
			
		||||
         vl_putpixel(buffer, offset, color);
 | 
			
		||||
     }
 | 
			
		||||
     offset += delta;
 | 
			
		||||
 }
 | 
			
		||||
 return array_b[b>>FIXED_SHIFT]*G_CNT*R_CNT
 | 
			
		||||
      + array_g[g>>FIXED_SHIFT]*R_CNT
 | 
			
		||||
      + array_r[r>>FIXED_SHIFT];
 | 
			
		||||
}
 | 
			
		||||
#define vl_mixfix8 vl_mixfix8fake
 | 
			
		||||
static int vl_mixfix15 (fixed r, fixed g, fixed b)
 | 
			
		||||
{
 | 
			
		||||
 return ((r>>(3+FIXED_SHIFT))<<10)
 | 
			
		||||
       |((g>>(3+FIXED_SHIFT))<<5)
 | 
			
		||||
       |(b>>(3+FIXED_SHIFT));
 | 
			
		||||
}
 | 
			
		||||
static int vl_mixfix16 (fixed r, fixed g, fixed b)
 | 
			
		||||
{
 | 
			
		||||
 return ((r>>(3+FIXED_SHIFT))<<11)
 | 
			
		||||
       |((g>>(2+FIXED_SHIFT))<<5)
 | 
			
		||||
       |(b>>(3+FIXED_SHIFT));
 | 
			
		||||
}
 | 
			
		||||
#define vl_mixfix24 vl_mixfix32
 | 
			
		||||
static int vl_mixfix32 (fixed r, fixed g, fixed b)
 | 
			
		||||
{
 | 
			
		||||
 return ((r>>FIXED_SHIFT)<<16)
 | 
			
		||||
       |((g>>FIXED_SHIFT)<<8)
 | 
			
		||||
       |(b>>FIXED_SHIFT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_mixrgba*:
 | 
			
		||||
 *  Color composition (w/ ALPHA).
 | 
			
		||||
/* Desc: color composition (w/ ALPHA)
 | 
			
		||||
 *
 | 
			
		||||
 * In  : array of integers (R, G, B, A)
 | 
			
		||||
 * Out : color
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
#define vl_mixrgba8 vl_mixrgb8fake
 | 
			
		||||
#define vl_mixrgba15 vl_mixrgb15
 | 
			
		||||
#define vl_mixrgba16 vl_mixrgb16
 | 
			
		||||
#define vl_mixrgba24 vl_mixrgb24
 | 
			
		||||
@@ -114,9 +156,20 @@ static int vl_mixrgba32 (const unsigned char rgba[])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_mixrgb*:
 | 
			
		||||
 *  Color composition (w/o ALPHA).
 | 
			
		||||
/* Desc: color composition (w/o ALPHA)
 | 
			
		||||
 *
 | 
			
		||||
 * In  : array of integers (R, G, B)
 | 
			
		||||
 * Out : color
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static int vl_mixrgb8fake (const unsigned char rgba[])
 | 
			
		||||
{
 | 
			
		||||
 return array_b[rgba[2]]*G_CNT*R_CNT
 | 
			
		||||
      + array_g[rgba[1]]*R_CNT
 | 
			
		||||
      + array_r[rgba[0]];
 | 
			
		||||
}
 | 
			
		||||
#define vl_mixrgb8 vl_mixrgb8fake
 | 
			
		||||
static int vl_mixrgb15 (const unsigned char rgb[])
 | 
			
		||||
{
 | 
			
		||||
 return ((rgb[0]>>3)<<10)|((rgb[1]>>3)<<5)|(rgb[2]>>3);
 | 
			
		||||
@@ -133,36 +186,57 @@ static int vl_mixrgb32 (const unsigned char rgb[])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* v_getrgba*:
 | 
			
		||||
 *  Color decomposition.
 | 
			
		||||
/* Desc: color decomposition
 | 
			
		||||
 *
 | 
			
		||||
 * In  : pixel offset, array of integers to hold color components (R, G, B, A)
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses current read buffer
 | 
			
		||||
 */
 | 
			
		||||
static void v_getrgba15 (void *buffer, int offset, unsigned char rgba[4])
 | 
			
		||||
static void v_getrgba8fake6 (unsigned int offset, unsigned char rgba[])
 | 
			
		||||
{
 | 
			
		||||
 int c = ((word16 *)buffer)[offset];
 | 
			
		||||
 word32 c = VGAPalette[((word8 *)vl_current_read_buffer)[offset]];
 | 
			
		||||
 rgba[0] = _rgb_scale_6[(c >> 16) & 0x3F];
 | 
			
		||||
 rgba[1] = _rgb_scale_6[(c >> 8) & 0x3F];
 | 
			
		||||
 rgba[2] = _rgb_scale_6[c & 0x3F];
 | 
			
		||||
 rgba[3] = c >> 24;
 | 
			
		||||
}
 | 
			
		||||
static void v_getrgba8fake8 (unsigned int offset, unsigned char rgba[])
 | 
			
		||||
{
 | 
			
		||||
 word32 c = VGAPalette[((word8 *)vl_current_read_buffer)[offset]];
 | 
			
		||||
 rgba[0] = c >> 16;
 | 
			
		||||
 rgba[1] = c >> 8;
 | 
			
		||||
 rgba[2] = c;
 | 
			
		||||
 rgba[3] = c >> 24;
 | 
			
		||||
}
 | 
			
		||||
#define v_getrgba8 v_getrgba8fake6
 | 
			
		||||
static void v_getrgba15 (unsigned int offset, unsigned char rgba[4])
 | 
			
		||||
{
 | 
			
		||||
 word32 c = ((word16 *)vl_current_read_buffer)[offset];
 | 
			
		||||
 rgba[0] = _rgb_scale_5[(c >> 10) & 0x1F];
 | 
			
		||||
 rgba[1] = _rgb_scale_5[(c >> 5) & 0x1F];
 | 
			
		||||
 rgba[2] = _rgb_scale_5[c & 0x1F];
 | 
			
		||||
 rgba[3] = 255;
 | 
			
		||||
}
 | 
			
		||||
static void v_getrgba16 (void *buffer, int offset, unsigned char rgba[4])
 | 
			
		||||
static void v_getrgba16 (unsigned int offset, unsigned char rgba[4])
 | 
			
		||||
{
 | 
			
		||||
 int c = ((word16 *)buffer)[offset];
 | 
			
		||||
 word32 c = ((word16 *)vl_current_read_buffer)[offset];
 | 
			
		||||
 rgba[0] = _rgb_scale_5[(c >> 11) & 0x1F];
 | 
			
		||||
 rgba[1] = _rgb_scale_6[(c >> 5) & 0x3F];
 | 
			
		||||
 rgba[2] = _rgb_scale_5[c & 0x1F];
 | 
			
		||||
 rgba[3] = 255;
 | 
			
		||||
}
 | 
			
		||||
static void v_getrgba24 (void *buffer, int offset, unsigned char rgba[4])
 | 
			
		||||
static void v_getrgba24 (unsigned int offset, unsigned char rgba[4])
 | 
			
		||||
{
 | 
			
		||||
 int c = *(word32 *)((long)buffer+offset*3);
 | 
			
		||||
 word32 c = *(word32 *)((long)vl_current_read_buffer+offset*3);
 | 
			
		||||
 rgba[0] = c >> 16;
 | 
			
		||||
 rgba[1] = c >> 8;
 | 
			
		||||
 rgba[2] = c;
 | 
			
		||||
 rgba[3] = 255;
 | 
			
		||||
}
 | 
			
		||||
static void v_getrgba32 (void *buffer, int offset, unsigned char rgba[4])
 | 
			
		||||
static void v_getrgba32 (unsigned int offset, unsigned char rgba[4])
 | 
			
		||||
{
 | 
			
		||||
 int c = ((word32 *)buffer)[offset];
 | 
			
		||||
 word32 c = ((word32 *)vl_current_read_buffer)[offset];
 | 
			
		||||
 rgba[0] = c >> 16;
 | 
			
		||||
 rgba[1] = c >> 8;
 | 
			
		||||
 rgba[2] = c; 
 | 
			
		||||
@@ -171,54 +245,186 @@ static void v_getrgba32 (void *buffer, int offset, unsigned char rgba[4])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_sync_buffer:
 | 
			
		||||
 *  Syncs buffer with video hardware. Returns NULL in case of failure.
 | 
			
		||||
/* Desc: pixel retrieval
 | 
			
		||||
 *
 | 
			
		||||
 * In  : pixel offset
 | 
			
		||||
 * Out : pixel value
 | 
			
		||||
 *
 | 
			
		||||
 * Note: uses current read buffer
 | 
			
		||||
 */
 | 
			
		||||
void *vl_sync_buffer (void *buffer, int x, int y, int width, int height)
 | 
			
		||||
static int v_getpixel8 (unsigned int offset)
 | 
			
		||||
{
 | 
			
		||||
 void *newbuf;
 | 
			
		||||
 return ((word8 *)vl_current_read_buffer)[offset];
 | 
			
		||||
}
 | 
			
		||||
#define v_getpixel15 v_getpixel16
 | 
			
		||||
static int v_getpixel16 (unsigned int offset)
 | 
			
		||||
{
 | 
			
		||||
 return ((word16 *)vl_current_read_buffer)[offset];
 | 
			
		||||
}
 | 
			
		||||
static int v_getpixel24 (unsigned int offset)
 | 
			
		||||
{
 | 
			
		||||
 return *(word32 *)((long)vl_current_read_buffer+offset*3);
 | 
			
		||||
}
 | 
			
		||||
static int v_getpixel32 (unsigned int offset)
 | 
			
		||||
{
 | 
			
		||||
 return ((word32 *)vl_current_read_buffer)[offset];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 if (width&3) {
 | 
			
		||||
    return NULL;
 | 
			
		||||
 } else {
 | 
			
		||||
    if ((newbuf=realloc(buffer, width*height*video_bypp))!=NULL) {
 | 
			
		||||
       vl_current_offset = video_scanlen * y + video_bypp * x;
 | 
			
		||||
       current_width = width;
 | 
			
		||||
       vl_current_delta = video_scanlen - video_bypp * width;
 | 
			
		||||
    }
 | 
			
		||||
    return newbuf;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: set one palette entry
 | 
			
		||||
 *
 | 
			
		||||
 * In  : index, R, G, B
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: color components are in range [0.0 .. 1.0]
 | 
			
		||||
 */
 | 
			
		||||
void vl_setCI (int index, float red, float green, float blue)
 | 
			
		||||
{
 | 
			
		||||
 drv->setCI_f(index, red, green, blue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: set one palette entry
 | 
			
		||||
 *
 | 
			
		||||
 * In  : color, R, G, B
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static void fake_setcolor (int c, int r, int g, int b)
 | 
			
		||||
{
 | 
			
		||||
 VGAPalette[c] = 0xff000000 | (r<<16) | (g<<8) | b;
 | 
			
		||||
 | 
			
		||||
 drv->setCI_i(c, r, g, b);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: build FakeColor palette
 | 
			
		||||
 *
 | 
			
		||||
 * In  : CI precision in bits
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static void fake_buildpalette (int bits)
 | 
			
		||||
{
 | 
			
		||||
 double c_r, c_g, c_b;
 | 
			
		||||
 int r, g, b, color = 0;
 | 
			
		||||
 | 
			
		||||
 double max = (1 << bits) - 1;
 | 
			
		||||
 | 
			
		||||
 for (b=0; b<B_CNT; ++b) {
 | 
			
		||||
     for (g=0; g<G_CNT; ++g) {
 | 
			
		||||
         for (r=0; r<R_CNT; ++r) {
 | 
			
		||||
             c_r = 0.5 + (double)r*(max-R_BIAS)/(R_CNT-1.) + R_BIAS;
 | 
			
		||||
             c_g = 0.5 + (double)g*(max-G_BIAS)/(G_CNT-1.) + G_BIAS;
 | 
			
		||||
             c_b = 0.5 + (double)b*(max-B_BIAS)/(B_CNT-1.) + B_BIAS;
 | 
			
		||||
             fake_setcolor(color++, (int)c_r, (int)c_g, (int)c_b);
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 for (color=0; color<256; color++) {
 | 
			
		||||
     c_r = (double)color*R_CNT/256.;
 | 
			
		||||
     c_g = (double)color*G_CNT/256.;
 | 
			
		||||
     c_b = (double)color*B_CNT/256.;
 | 
			
		||||
     array_r[color] = (int)c_r;
 | 
			
		||||
     array_g[color] = (int)c_g;
 | 
			
		||||
     array_b[color] = (int)c_b;
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_setup_mode:
 | 
			
		||||
/* Desc: sync buffer with video hardware
 | 
			
		||||
 *
 | 
			
		||||
 *  success: 0
 | 
			
		||||
 *  failure: -1
 | 
			
		||||
 * In  : ptr to old buffer, position, size
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
int vl_sync_buffer (void **buffer, int x, int y, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
 if ((width & 7) || (x < 0) || (y < 0) || (x+width > video_mode->xres) || (y+height > video_mode->yres)) {
 | 
			
		||||
    return -1;
 | 
			
		||||
 } else {
 | 
			
		||||
    void *newbuf = *buffer;
 | 
			
		||||
 | 
			
		||||
    if ((newbuf == NULL) || (vl_current_width != width) || (vl_current_height != height)) {
 | 
			
		||||
       newbuf = realloc(newbuf, width * height * video_bypp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (newbuf == NULL) {
 | 
			
		||||
       return -2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    vl_current_width = width;
 | 
			
		||||
    vl_current_height = height;
 | 
			
		||||
    vl_current_stride = vl_current_width * video_bypp;
 | 
			
		||||
    vl_current_bytes = vl_current_stride * height;
 | 
			
		||||
 | 
			
		||||
    vl_current_offset = video_scanlen * y + video_bypp * x;
 | 
			
		||||
    vl_current_delta = video_scanlen - vl_current_stride;
 | 
			
		||||
 | 
			
		||||
    vl_current_draw_buffer = vl_current_read_buffer = *buffer = newbuf;
 | 
			
		||||
    return 0;
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: state retrieval
 | 
			
		||||
 *
 | 
			
		||||
 * In  : name, storage
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
int vl_get (int pname, int *params)
 | 
			
		||||
{
 | 
			
		||||
 switch (pname) {
 | 
			
		||||
        case VL_GET_SCREEN_SIZE:
 | 
			
		||||
             params[0] = video_mode->xres;
 | 
			
		||||
             params[1] = video_mode->yres;
 | 
			
		||||
             break;
 | 
			
		||||
        default:
 | 
			
		||||
             return drv->get(pname, params);
 | 
			
		||||
 }
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Desc: setup mode
 | 
			
		||||
 *
 | 
			
		||||
 * In  : ptr to mode definition
 | 
			
		||||
 * Out : 0 if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
static int vl_setup_mode (vl_mode *p)
 | 
			
		||||
{
 | 
			
		||||
 if (p->mode&0x4000) {
 | 
			
		||||
    vl_flip = l_dump_virtual;
 | 
			
		||||
 } else {
 | 
			
		||||
    { int n; for (gran_shift=0, n=p->gran; n; gran_shift++, n>>=1) ; }
 | 
			
		||||
    gran_mask = (1<<(--gran_shift)) - 1;
 | 
			
		||||
    if ((unsigned)p->gran != (gran_mask+1)) {
 | 
			
		||||
       return -1;
 | 
			
		||||
    }
 | 
			
		||||
    vl_hw_granularity = p->gran;
 | 
			
		||||
    vl_flip = b_dump_virtual;
 | 
			
		||||
 if (p == NULL) {
 | 
			
		||||
    return -1;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
#define INITPTR(bpp) \
 | 
			
		||||
        vl_putpixel = v_putpixel##bpp; \
 | 
			
		||||
        vl_getrgba = v_getrgba##bpp;   \
 | 
			
		||||
        vl_clear = v_clear##bpp;       \
 | 
			
		||||
        vl_getpixel = v_getpixel##bpp; \
 | 
			
		||||
        vl_rect = v_rect##bpp;         \
 | 
			
		||||
        vl_mixfix = vl_mixfix##bpp;    \
 | 
			
		||||
        vl_mixrgb = vl_mixrgb##bpp;    \
 | 
			
		||||
        vl_mixrgba = vl_mixrgba##bpp;
 | 
			
		||||
 | 
			
		||||
        vl_mixrgba = vl_mixrgba##bpp;  \
 | 
			
		||||
        vl_clear = _can_mmx() ? v_clear##bpp##_mmx : v_clear##bpp
 | 
			
		||||
        
 | 
			
		||||
 switch (p->bpp) {
 | 
			
		||||
        case 8:
 | 
			
		||||
             INITPTR(8);
 | 
			
		||||
             break;
 | 
			
		||||
        case 15:
 | 
			
		||||
             INITPTR(15);
 | 
			
		||||
             break;
 | 
			
		||||
@@ -237,6 +443,7 @@ static int vl_setup_mode (vl_mode *p)
 | 
			
		||||
 | 
			
		||||
#undef INITPTR
 | 
			
		||||
 | 
			
		||||
 video_mode = p;
 | 
			
		||||
 video_bypp = (p->bpp+7)/8;
 | 
			
		||||
 video_scanlen = p->scanlen;
 | 
			
		||||
 vl_video_selector = p->sel;
 | 
			
		||||
@@ -246,32 +453,48 @@ static int vl_setup_mode (vl_mode *p)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_video_exit:
 | 
			
		||||
 *  Shutdown the video engine.
 | 
			
		||||
 *  Restores to the mode prior to first call to `vl_video_init'.
 | 
			
		||||
/* Desc: restore to the mode prior to first call to `vl_video_init'.
 | 
			
		||||
 *
 | 
			
		||||
 * In  : -
 | 
			
		||||
 * Out : -
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
void vl_video_exit (void)
 | 
			
		||||
{
 | 
			
		||||
 drv->restore();
 | 
			
		||||
 drv->finit();
 | 
			
		||||
 drv->fini();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* vl_video_init:
 | 
			
		||||
 *  Enter mode.
 | 
			
		||||
/* Desc: enter mode
 | 
			
		||||
 *
 | 
			
		||||
 *  success: 0
 | 
			
		||||
 *  failure: -1
 | 
			
		||||
 * In  : xres, yres, bits/pixel, RGB, refresh rate
 | 
			
		||||
 * Out : pixel width in bits if success
 | 
			
		||||
 *
 | 
			
		||||
 * Note: -
 | 
			
		||||
 */
 | 
			
		||||
int vl_video_init (int width, int height, int bpp, int refresh)
 | 
			
		||||
int vl_video_init (int width, int height, int bpp, int rgb, int refresh)
 | 
			
		||||
{
 | 
			
		||||
 int fake;
 | 
			
		||||
 vl_mode *p, *q;
 | 
			
		||||
 unsigned int min;
 | 
			
		||||
 | 
			
		||||
 fake = 0;
 | 
			
		||||
 if (!rgb) {
 | 
			
		||||
    bpp = 8;
 | 
			
		||||
 } else if (bpp == 8) {
 | 
			
		||||
    fake = 1;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* initialize hardware */
 | 
			
		||||
 if ((q=drv->getmodes()) == NULL) {
 | 
			
		||||
    return -1;
 | 
			
		||||
 drv = &VESA;
 | 
			
		||||
 if ((q=drv->init()) == NULL) {
 | 
			
		||||
    drv = &VGA;
 | 
			
		||||
    if ((q=drv->init()) == NULL) {
 | 
			
		||||
       return 0;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* search for a mode that fits our request */
 | 
			
		||||
@@ -284,11 +507,19 @@ int vl_video_init (int width, int height, int bpp, int refresh)
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* check, setup and enter mode */
 | 
			
		||||
 if ((p!=NULL) && (vl_setup_mode(p) == 0) && (drv->entermode(p, refresh) == 0)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
 /* setup and enter mode */
 | 
			
		||||
 if ((vl_setup_mode(p) == 0) && (drv->entermode(p, refresh) == 0)) {
 | 
			
		||||
    vl_flip = drv->blit;
 | 
			
		||||
    if (fake) {
 | 
			
		||||
       drv->get(VL_GET_CI_PREC, (int *)(&min));
 | 
			
		||||
       fake_buildpalette(min);
 | 
			
		||||
       if (min == 8) {
 | 
			
		||||
          vl_getrgba = v_getrgba8fake8;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
    return bpp;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 /* abort */
 | 
			
		||||
 return -1;
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user