X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=docs%2FREADME.DJ;h=5f783ac53fb7f20421f7e20744c5072887350c11;hb=9032d2a13ecd019206a48767d9205c0aafa7cca2;hp=444fe8947c55ccfe02c2469ccaa6773c32243ac6;hpb=05ed911aca5ad0a6842ea0d6f3ac99b79ec752db;p=mesa.git diff --git a/docs/README.DJ b/docs/README.DJ index 444fe8947c5..5f783ac53fb 100644 --- a/docs/README.DJ +++ b/docs/README.DJ @@ -1,210 +1,275 @@ - Mesa 4.0 DOS/DJGPP Port v1.1 - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - - -Description: -~~~~~~~~~~~~ - -Well, guess what... this is the DOS port of Mesa 4.0.3, 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. - - - -Legal: -~~~~~~ - -Mesa copyright applies, provided this package is used within Mesa. For anything -else, see GPL. - - - -Installation: -~~~~~~~~~~~~~ - -Unzip and type: - - make -f Makefile.DJ [OPTIONS...] - -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. - 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 - 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. - default = no - HAVE_SSE=1 (see HAVE_MMX) - default = no - HAVE_3DNOW=1 (see HAVE_MMX) - 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: - 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.03 + gcc v3.1 + make v3.79.1 - - - -FAQ: -~~~~ - -1. Compilation - - Q) I tried to run `make' and it exits because `gcc' complains it cannot find - some stupid file. - A) You need LFN support. - A) If FX is defined, pay attention to Glide path. - -2. Dynamic modules - - 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) I have DXE2, but I couln'd 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. - - 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. - - Q) Okay, DXE2 modules are built. How can I use them? - A) Usage of the dynamic modules requires three things: - - include DMESADXE.H in one of the sources, so references inside - dynamic modules will get resolved (or use `-include' directive). - - link against import libraries (libI*.a) and LIBDL.A, which will do - the dynamic linkage job for you - - put the DXEs somewhere along the library path (LD_LIBRARY_PATH) or - in the current directory - For example: - gcc -o OUT.exe -include dmesadxe.h IN.c -ligl -liglu -liglut -ldl - - Q) The application dies with "Abort!" due to unresolved symbols. - A) This is bad! Extract the unresolved symbol list from this module. For - example: - dxe2gen --show-unres gl.dxe > u - Check DMESADXE.H; the symbols in `u' must either be present here or be - exported from another module that has to be loaded before your faulting - one. Then recompile. - -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 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 - 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! - 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) The DJGPP port of Mesa 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 - - - -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. - -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... - -The mouse driver is far from complete (lack of positioning, drawing, etc), -but is enough to make almost all the demos work. - -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! - -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. - -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. - - - -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 - - - -Contact: -~~~~~~~~ - -Name: Borca Daniel -E-mail: dborca@yahoo.com -WWW: http://www.geocities.com/dborca/ + 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/