131 lines
4.5 KiB
Plaintext
131 lines
4.5 KiB
Plaintext
![]() |
Mesa 4.0.1 DOS/DJGPP Port version 0.1
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
|
||
|
|
||
|
First of all...
|
||
|
~~~~~~~~~~~~~~~
|
||
|
|
||
|
This is a DOS port for MESA 4.0.1. I didn't bother to consider any DOS C
|
||
|
compiler other than gcc, so this port was written using DJGPP v2. To be more
|
||
|
precise:
|
||
|
djdev 2.03
|
||
|
gcc v3.0.3
|
||
|
make v3.79
|
||
|
|
||
|
Almost all demos were compiled and ran succesfully on my system:
|
||
|
CPU: Intel Pentium w/ MMX @166 MHz
|
||
|
Mainboard: ViA Apollo VP2 w/ 128 MB SDRAM
|
||
|
Video card: Matrox Millenium I w/ 4096 kB WRAM, Matrox BIOS v3.0
|
||
|
|
||
|
Since I don't have access to any accelerated video hardware, this port is
|
||
|
entirely based on VESA/SuperVGA. My little attempt to use FreeBE/AF ended in
|
||
|
a failure, but that's another story: it seemed to work fine with my older
|
||
|
Matrox Millenium w/ 2MB, and then I got another Matrox Millenium w/ 4MB. The
|
||
|
problem with latter was it had a dead BIOS; I hot-flashed it and made it work
|
||
|
in all environments (Windows 95, VESA, etc) but FreeBE/AF.
|
||
|
|
||
|
|
||
|
|
||
|
Legal:
|
||
|
~~~~~~
|
||
|
|
||
|
This software is distributed under the terms of the GNU Lesser General Public
|
||
|
License.
|
||
|
|
||
|
Source code written by others is subject to its respective copyright.
|
||
|
|
||
|
|
||
|
|
||
|
libGL (the core):
|
||
|
~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
Of course, MESA 4.0.1 core sources are required. It will probably work with
|
||
|
MESA 3.5, but not a chance with earlier versions due to major changes to the
|
||
|
MESA driver interface and the directory tree. All should compile succesfully.
|
||
|
|
||
|
The driver has its origins in ddsample.c, written by Brian Paul and found by
|
||
|
me in MESA 3.4.2. I touched almost all the functions, changing the coding
|
||
|
style ;-( Sorry!
|
||
|
|
||
|
Pitfalls:
|
||
|
1. The current version supports only RGB[A] modes, for it made no sense to me
|
||
|
to endorse color-index (aka palette) modes.
|
||
|
2. Only double-buffered is allowed because it was simpler to implement at
|
||
|
that moment. Single-buffered will appear soon, especially if I can find a
|
||
|
way to use hardware acceleration.
|
||
|
3. Another weird "feature" is that buffer width & height must be multiple of
|
||
|
4 (I'm a lazy programmer and I found that the easiest way to keep buffer
|
||
|
handling at peak performance ;-).
|
||
|
4. The video mode selector is tricky: it searches for the smallest mode which
|
||
|
will entirely contain the buffer at its current position. If you want a
|
||
|
small buffer in a high-res mode, try to position it very far to the right
|
||
|
(or down). I'd really use some ideas here!!!
|
||
|
|
||
|
|
||
|
|
||
|
libGLU:
|
||
|
~~~~~~~
|
||
|
|
||
|
Mesa GLU sources are required. Everything should run smooth.
|
||
|
|
||
|
|
||
|
|
||
|
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 some Allegro "infusions"; my deeply thanks to Shawn Hargreaves and
|
||
|
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 ;-)
|
||
|
|
||
|
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.
|
||
|
|
||
|
Window creating defaults: 640x480x16 at (0,0), 8-bit stencil, 16-bit accum.
|
||
|
|
||
|
|
||
|
|
||
|
Installation:
|
||
|
~~~~~~~~~~~~~
|
||
|
|
||
|
Unzip into the MESA directory, and type "make -f Makefile.DJ" to compile all
|
||
|
libraries. Long filename support is required during compilation. The examples
|
||
|
are not built automagically (see Pitfalls above).
|
||
|
|
||
|
|
||
|
|
||
|
History:
|
||
|
~~~~~~~~
|
||
|
|
||
|
v0.1 feb-2002 initial release
|
||
|
v0.2 ..soon..
|
||
|
|
||
|
|
||
|
|
||
|
Contact:
|
||
|
~~~~~~~~
|
||
|
|
||
|
Name: Borca Daniel
|
||
|
E-mail: dborca@yahoo.com
|
||
|
WWW: http://www.geocities.com/dborca/
|