- Mesa 5.0.1 DOS/DJGPP Port v1.3\r
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
-\r
-\r
-\r
-Description:\r
-~~~~~~~~~~~~\r
-\r
-Well, guess what... this is the DOS port of Mesa 5.0.1, for DJGPP fans... Whoa!\r
-The driver has its origins in ddsample.c, written by Brian Paul and found by me\r
-in Mesa 3.4.2.\r
-\r
-\r
-\r
-Legal:\r
-~~~~~~\r
-\r
-Mesa copyright applies, provided this package is used within Mesa. For anything\r
-else, see GPL.\r
-\r
-\r
-\r
-Installation:\r
-~~~~~~~~~~~~~\r
-\r
-Unzip and type:\r
-\r
- make -f Makefile.DJ [OPTIONS...]\r
-\r
-Available options:\r
-\r
- Environment variables:\r
- CPU optimize for the given processor.\r
- default = k6\r
- GLU=[src|si] specify GLU directory; can be `src' (src-glu = Mesa)\r
- or `si' (si-glu = SGI's GLU -- requires GNU/C++).\r
- default = src\r
- GLIDE path to Glide3 SDK include files; used with FX.\r
- default = $(TOP)/include/glide3\r
- FX=1 build for 3dfx Glide3. Note that this disables\r
- compilation of most DMesa code and requires fxMesa.\r
- As a consequence, you'll need the DJGPP Glide3\r
- library to build any application.\r
- default = no\r
- MATROX=1 build for Matrox Millennium I (MGA2064W) cards.\r
- This is experimental and not intensively tested.\r
- default = no\r
- HAVE_X86=1 optimize for i386.\r
- default = no\r
- HAVE_MMX=1 allow MMX specializations, provided your assembler\r
- supports MMX instruction set. However, the true CPU\r
- capabilities are checked at run-time to avoid crashes.\r
- default = no\r
- HAVE_SSE=1 (see HAVE_MMX)\r
- default = no\r
- HAVE_3DNOW=1 (see HAVE_MMX)\r
- default = no\r
-\r
- Targets:\r
- all: build everything\r
- libgl: build GL\r
- libglu: build GLU\r
- libglut: build GLUT\r
- clean: remove object files\r
- realclean: remove all generated files\r
-\r
-\r
-\r
-Tested on:\r
- CPU: K6-2 (CXT) @500(412.5) MHz\r
- Mainboard: ViA Apollo VP2/97 w/ 128 MB SDRAM\r
- Video card: PowerColor EvilKing3 (Voodoo3 3000 PCI) w/ 16 MB SDRAM\r
- DJGPP: djdev 2.04 + gcc v3.2.2 + make v3.79.1\r
- OS: DOS and Win9x\r
-\r
-\r
-\r
-FAQ:\r
-~~~~\r
-\r
-1. Compilation\r
-\r
- Q) I tried to run `make' and it exits because `gcc' complains it cannot find\r
- some stupid file.\r
- A) You need LFN support.\r
- A) When compiling for Glide (FX=1), pay attention to Glide path.\r
-\r
- Q) Libraries built OK, but linker complains about `vsnprintf' every time I\r
- compile some demo.\r
- A) Upgrade to DJGPP 2.04.\r
- A) Add `vsnprintf.c' to the CORE_SOURCES in `src/Makefile.DJ' (untested!).\r
- A) The following hack should be safe in 90% of the cases, but if anything\r
- goes wrong, don't come back to me crying. Anyway, patch `src/imports.c'\r
- with the following line:\r
- #define vsnprintf(buf, max, fmt, arg) vsprintf(buf, fmt, arg)\r
-\r
- Q) `make' complains about DXE3 or something, yet it builds the libraries.\r
- A) DXE3 refers to the DJGPP dynamic modules. You'll need either the latest\r
- DJGPP distro, or download the separate package from my web page. Read the\r
- DXE3 documentation on how to use them. Hint: build your export object\r
- file; then link it with your application. For example:\r
- dxe3res -o dxe3tbl.c gl.dxe glu.dxe glut.dxe\r
- gcc -o dxe3tbl.o -c dxe3tbl.c\r
- gcc -o OUT.exe dxe3tbl.o IN.c -liglut -liglu -ligl -ldl\r
-\r
-2. Using Mesa for DJGPP\r
-\r
- Q) DMesa is so SLOOOW! The Win32 OpenGL performs so much better...\r
- A) Is that a question? If you have a Voodoo3/Banshee card, you're lucky (the\r
- Glide port is on my web page). If you have a Matrox Millennium I card,\r
- you just MIGHT be lucky... If you haven't, sorry; everything is done in\r
- software. Suggestions?\r
-\r
- Q) I tried to set refresh rate w/ DMesa, but without success.\r
- A) Refresh rate control works only for VESA 3.0. If you were compiling for\r
- Glide, see Glide info. If not, sorry!\r
-\r
- Q) I made a simple application and it does nothing. It exits right away. Not\r
- even a blank screen.\r
- A) The pure software drivers (VESA/VGA) support only double-buffered modes.\r
- A) Another weird "feature" is that buffer width must be multiple of 8 (I'm a\r
- lazy programmer and I found that the easiest way to keep buffer handling\r
- at peak performance ;-).\r
-\r
- Q) My demo doesn't display text. I know I used the GLUT font routines!\r
- A) Then you probably use GLUT as a DXE. Well, there is no direct access to\r
- variables due to the way DXE works. Read the documentation. The author of\r
- GLUT took this into account for _WIN32 DLL's only; I don't want to modify\r
- his headers. The only workaround is to link GLUT the old way :-(\r
-\r
- Q) The GLUT is incomplete.\r
- A) See below.\r
-\r
-\r
-\r
-libGLUT (the toolkit):\r
-~~~~~~~~~~~~~~~~~~~~~~\r
-\r
-Well, this "skeletal" GLUT implementation was taken from AllegGL project and\r
-heavily changed. Thanks should go to Bernhard Tschirren, Mark Kilgard, Brian\r
-Paul and probably others (or probably not ;-). GLUT functionality will be\r
-extended only on an "as needed" basis.\r
-\r
-GLUT talks to hardware via PC_HW package which was put together from various\r
-pieces I wrote long time ago. It consists from the keyboard, mouse and timer\r
-drivers.\r
-\r
-My keyboard driver used only scancodes; as GLUT requires ASCII values for keys,\r
-I borrowed the translation tables (and maybe more) from Allegro -- many thanks\r
-to Shawn Hargreaves et co. Ctrl-Alt-Del (plus Ctrl-Alt-End, for Windows users)\r
-will shut down the GLUT engine unconditionally: it will raise SIGINT, which in\r
-turn will (hopefully) call the destructors, thus cleaning up your/my mess ;-)\r
-NB: since the DJGPP guys ensured signal handlers won't go beyond program's\r
-space (and since dynamic modules shall) the SIGINT can't be hooked (well, it\r
-can, but it is useless), therefore you must live with the 'Exiting due to\r
-signal SIGINT' message...\r
-\r
-The mouse driver is far from complete (lack of drawing, etc), but is enough to\r
-make almost all the demos work. Supports the CuteMouse WheelAPI.\r
-\r
-The timer is pretty versatile for it supports multiple timers with different\r
-frequencies. While not being the most accurate timer in the known universe, I\r
-think it's OK. Take this example: you have timer A with a very high rate, and\r
-then you have timer B with very low rate compared to A; now, A ticks OK, but\r
-timer B will probably loose precision!\r
-\r
-As an addition, stdout and stderr are redirected and dumped upon exit. This\r
-means that `printf' can be safely called during graphics. A bit of a hack, I\r
-know, because all messages come in bulk, but I think it's better than nothing.\r
-"Borrowed" from LIBRHUTI (Robert Hoehne).\r
-\r
-Window creating defaults: 300x300x16 at (0,0), 16-bit depth, 16-bit accum,\r
-8-bit stencil. However, the video mode is chosen in such a way that first\r
-window will fit. If you need high resolution with small windows, set initial\r
-position far to the right (or way down); then you can move them back to any\r
-position right before the main loop.\r
-\r
-The following environment variables can customize GLUT behaviour:\r
- DMESA_GLUT_REFRESH - set vertical screen refresh rate (VESA3)\r
- DMESA_GLUT_BPP - set default bits per pixel (VGA needs 8)\r
- GLUT_FPS - print frames/second statistics to stderr\r
-\r
-\r
-\r
-History:\r
-~~~~~~~~\r
-\r
-v1.0 (mar-2002)\r
- initial release\r
-\r
-v1.1 (sep-2002)\r
- + added 3dfx Glide3 support\r
- + added refresh rate control\r
- + added fonts in GLUT\r
- * lots of minor changes\r
-\r
-v1.2 (nov-2002)\r
- * synced w/ Mesa-4.1\r
- - removed dmesadxe.h\r
-\r
-v1.3 (mar-2003)\r
- + enabled OpenGL 1.4 support\r
- + added MMX clear/blit routines\r
- + enabled SGI's GLU compilation\r
- + added samples makefile\r
- + added new GLUT functions\r
- + added color-index modes\r
- + added Matrox Millennium MGA2064W driver\r
- + added 8bit FakeColor (thanks to Neil Funk)\r
- + added VGA support (to keep Ben Decker happy)\r
- ! fixed some compilation errors (reported by Chan Kar Heng)\r
- * optimized driver for faster callback access... yeah, right :)\r
- * overhauled virtual buffer and internal video drivers\r
- * better fxMesa integration\r
- * revamped GLUT\r
- * switched to DXE3\r
-\r
-\r
-\r
-Contact:\r
-~~~~~~~~\r
-\r
-Name: Borca Daniel\r
-E-mail: dborca@yahoo.com\r
-WWW: http://www.geocities.com/dborca/\r
+ Mesa 6.5 DOS/DJGPP Port v1.8
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+Description:
+~~~~~~~~~~~~
+
+Well, guess what... this is the DOS port of Mesa 6.5, for DJGPP fans... Whoa!
+The driver uses OSMesa to draw off screen, and then blits the buffer. This is
+not terribly efficient, and has some drawbacks, but saves maintenance costs.
+
+
+
+Legal:
+~~~~~~
+
+Mesa copyright applies.
+
+
+
+Installation:
+~~~~~~~~~~~~~
+
+Unzip and type:
+
+ make -f Makefile.DJ [OPTIONS...]
+
+Available options:
+
+ Environment variables:
+ CPU optimize for the given processor.
+ default = pentium
+ GLIDE path to Glide3 SDK; used with FX.
+ default = $(TOP)/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
+ X86=1 optimize for x86 (if possible, use MMX, SSE, 3DNow).
+ default = no
+
+ Targets:
+ all: build everything
+ libgl: build GL
+ libglu: build GLU
+ libglut: build GLUT
+ clean: remove object files
+ realclean: remove all generated files
+
+
+
+Tested on:
+ Video card: Radeon 9500
+ DJGPP: djdev 2.04 + gcc v4.1.0 + make v3.80
+ OS: DOS, Win98SE, WinXP (using Videoport driver)
+
+
+
+FAQ:
+~~~~
+
+1. Compilation
+
+ Q) `make' barfs and exits because it cannot find some stupid file.
+ A) You need LFN support.
+ A) When compiling for Glide (FX=1), pay attention to Glide path.
+
+ 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) Patch `src/mesa/main/imports.c' with the following line:
+ #define vsnprintf(buf, max, fmt, arg) vsprintf(buf, fmt, arg)
+ This hack should be safe in 90% of the cases, but if anything goes wrong,
+ don't come back to me crying.
+
+ 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.
+ A) When compiling for Glide (FX=1), make sure `glide3x.dxe' can be found in
+ LD_LIBRARY_PATH (or top `lib' directory).
+
+2. Using Mesa for DJGPP
+
+ Q) Every test I tried crashes badly.
+ A) If you have compiled with SSE and you're running under plain DOS, you
+ have to disable SSE at run-time. See environment variables below.
+
+ Q) DMesa is so SLOOOW! The Win32 OpenGL performs so much better...
+ A) Is that a question? If you have a 3dfx Voodoo (any model), you're
+ lucky (check http://sourceforge.net/projects/glide for the DJGPP port).
+ If you haven't, sorry; everything is done in software.
+
+ Q) I tried to set refresh rate w/ DMesa, but without success.
+ A) Refresh rate control works only for VESA 3.0 and the 3dfx driver (in
+ which case FX_GLIDE_REFRESH will be overwritten if it is defined and
+ is not 0).
+
+ Q) I made a simple application and it does nothing. It exits right away. Not
+ even a blank screen.
+ A) Software drivers (VESA/VGA/NUL) must to be constructed as single-buffered
+ visuals. However, DMesaSwapBuffers must be called to get any output.
+ 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) I'm getting a "bad font!" fatal error.
+ A) Always use GLUT_STROKE_* and GLUT_BITMAP_* constants when dealing with
+ GLUT fonts. If you're using `glut.dxe', then make sure GLUT_STROKE_* and
+ GLUT_BITMAP_* are mapped to integer constants, not to the actual font
+ address (same mechanism used for Win32 _DLL).
+
+ Q) What is NUL driver good for, if I don't get any output at all?
+ A) For debugging. The NUL driver is very much like OSMesa. Everything is
+ done just the same as VESA/VGA drivers, only it doesn't touch your video
+ hardware. You can query the actual buffer by issuing:
+ DMesaGetIntegerv(DMESA_GET_BUFFER_ADDR, &buffer);
+ and dump it to a file.
+
+ Q) How do I query for a list of available video modes to choose as a visual?
+ A) This is an ugly hack, for which I'm sure I'll burn in hell.
+ First, query for a list of modes:
+ n = DMesaGetIntegerv(DMESA_GET_VIDEO_MODES, NULL);
+ If `n' is strictly positive, you allocate an array of pointers to a given
+ struct (which is guaranteed to be extended only - not changed in future):
+ struct {
+ int xres, yres;
+ int bpp;
+ } **l = malloc(n * sizeof(void *));
+ Now pass the newly allocated buffer to fill in:
+ DMesaGetIntegerv(DMESA_GET_VIDEO_MODES, (GLint *)l);
+ And collect the info:
+ for (i = 0; i < n; i++) {
+ printf("%dx%d:%d\n", l[i]->xres, l[i]->yres, l[i]->bpp);
+ }
+
+ Q) The GLUT is incomplete.
+ A) See below.
+
+
+
+libGLUT (the toolkit):
+~~~~~~~~~~~~~~~~~~~~~~
+
+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.
+
+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.
+
+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. 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. 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: (0, 0, 300, 300), 16bpp. 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.
+
+
+
+Environment variables:
+~~~~~~~~~~~~~~~~~~~~~~
+ DMESA_NULDRV - (any value) force NUL driver
+ GLUT_FPS - print frames/second statistics to stderr
+ MESA_NO_SSE - (any value) safe option under pure DOS
+ DMESA_GLUT_REFRESH - set vertical screen refresh rate (VESA3)
+ DMESA_GLUT_BPP - set default bits per pixel (VGA needs 8)
+ DMESA_GLUT_ALPHA - set default alpha bits (8)
+ DMESA_GLUT_DEPTH - set default depth bits (16)
+ DMESA_GLUT_STENCIL - set default stencil bits (8)
+ DMESA_GLUT_ACCUM - set default accum bits (16)
+
+
+
+History:
+~~~~~~~~
+
+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.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
+
+v1.4 (dec-2003)
+ + enabled GLUT fonts with DXE
+ + truly added multi-window support in GLUT (for Adrian Woodward)
+ * accomodated makefiles with the new sourcetree
+ * fixed some ALPHA issues
+ * minor changes to PC_HW/timer interface
+ x hacked and slashed the 3dfx driver (w/ help from Hiroshi Morii)
+
+v1.5 (jan-2004)
+ + added interface to query available "visuals" (GLFW - Marcus Geelnard)
+ + added GLUT timer callback
+ - removed Matrox Millennium MGA2064W driver
+ x more changes to the 3dfx driver
+
+v1.6 (aug-2004)
+ + implemented NUL driver
+ + added DMesaGetProcAddress and glutGetProcAddress
+ * reorganized fxMesa wrapper to handle multiple contexts
+ ! fixed a horrible bug in VGA initialization routine
+ ! fixed partial clears
+
+v1.7 (???-2005)
+ + enabled OpenGL 2.0 support
+ + added support for sw texture compression
+ + added FreeGLUT specific functions
+ * no more GLX sources in DOS GLUT
+ * made GLUT timer callbacks less accurate but safer
+
+v1.8 (apr-2006)
+ * killed lots of code, the driver is now a front-end to OSMesa
+ * fixed problem with WinNT (http://www.volny.cz/martin.sulak/)
+ - removed 3dfx Glide3 support (temporarily?)
+
+
+
+Contact:
+~~~~~~~~
+
+Name: Daniel Borca
+E-mail: dborca@users.sourceforge.net
+WWW: http://www.geocities.com/dborca/