Compare commits
	
		
			120 Commits
		
	
	
		
			mesa-24.0.
			...
			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