| 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/ |