AMIGA AMIWIN PORT of MESA: THE OPENGL SOFTWARE EMULATION ======================================================== Port by Victor Ng-Thow-Hing (victorng@dgp.toronto.edu) Original Author (Brian Paul (brianp@ssec.wisc.edu) Dec.1 , 1995: Port of release Mesa 1.2.5 - Modifications made to minimize changes to Mesa distribution. Nov.25, 1995: Port of release Mesa 1.2.4 HISTORY ======= As a 3D graphics progammer, I was increasingly frustrated to see OpenGL appearing on so many platforms EXCEPT the Amiga. Up to now, the task of porting OpenGL directly from native Amiga drawing routines seemed like a daunting task. However, two important events made this port possible. First of all, Brian Paul wrote Mesa, the OpenGL software emulator that can be found on many platforms - except the Amiga and Atari (who cares about the latter!). This was pretty ironic considering that Mesa was originally prototyped on an Amiga! The second great event was when Holger Kruse developed AmiWin, the X11R6 server for the Amiga (definitely register for this great piece of software) and released a development kit so one could compile X programs with SAS/C. Since Mesa had X routines as its primitive drawing operations, this made a marriage of Mesa and Amiwin feasible. I copied over the sources from an ftp site, played with the code, wrote some Smakefiles, and voila, I had OpenGL programs displaying on my Amiga. Although the speed is nothing to be impressed about, this port can be potentially useful to those who want to quickly test their code in wireframe or perhaps learn more about programming with the OpenGL API. I hope Amiga developers will continue to write excellent software for their machine, especially more X clients for Amiwin. If you have any solutions so some of my problems in the porting notes, please send me some email! See you around, Vic. HOW TO CREATE THE LIBRARIES AND SAMPLE CODE =========================================== Just run the shell script mklib.amiwin in the mesa directory. This will make all the libraries and copy them into the mesa/lib directory. If you don't want to compile everything, just go to the desired directory and type smake in that directory. Change any of the variables in the smakefiles as necessary. You will REQUIRE the Amiwin development kit to compile these libraries since you need X11.LIB and the shareable X libraries. Some examples require the AmiTCP4.0 net.lib static link library and related header files for unix related header files and functions like sleep(). HOW TO USE THE MESA LIBRARIES ============================= Study the Smakefiles in the demos, samples and book directories for the proper SAS/C options and linkable libraries to use. Basically aux calls require Mesaaux.LIB, gl calls require MesaGL.LIB, glu calls MesaGLU.LIB, tk calls Mesatk.LIB. There is a preliminary port of MesaGLUT.LIB toolkit available in the lib directory with the other Mesa libraries. However, it seems to cause crashes on some of the sample code. Someone else may want to attempt a more stable port. PORTING NOTES TO AMIWIN ======================= My strategy of porting was to leave as much of the code untouched as possible. I surrounded any amiga specific changes with #ifdef AMIWIN ... #endif or #ifndef AMIWIN ... #endif preprocessor symbols. The code was ported on an Amiga 2000, with Fusion 40 accelerator and a Picasso II graphics card. The SAS/C 6.56 compiler was used, with the AmiWin 2.16 X development kit. All compilations were done for a 68040 CPU with 68882 math coprocessor for maximum speed. Please edit the smakefile for other compilers. I wrote smakefiles for the directories I ported. I omitted the Windows and Widgets directories. The former is for MS Windows and the latter requires Motif, which is not easily available for the Amiga. Here are the changes I did per directory: * mesa Nov. 25, 1995 v 1.2.4 - added a mklib.amiwin shell script that will make all the libraries and sample code for Mesa - created this readme file: readme.AMIGA * mesa/include Dec. 1, 1995 v 1.2.5 - added the following to GL/xmesa.h #ifdef AMIWIN #include <pragmas/xlib_pragmas.h> extern struct Library *XLibBase; #endif NET CHANGE: xmesa.h * mesa/src Nov. 25, 1995 v 1.2.4 - added the necessary pragma calls for X functions to the following: xmesa1.c, xmesa2.c, xmesa3.c, xfonts.c, glx.c This prevents undefined symbols errors during the linking phase for X library calls - created smakefile Dec. 1, 1995 v 1.2.5 - removed AMIWIN includes from xmesa1.c, xmesa2.c, xmesa3.c, xfonts.c, glx.c since they are now defined in include/GL/xmesa.h NET CHANGE: smakefile * mesa/src-tk Nov. 25, 1995 v 1.2.4 - added the necessary pragma calls for X functions to the following: private.h - created smakefile Dec. 1, 1995 v 1.2.5 - removed AMIWIN includes from private.h since it is now defined in include/GL/xmesa.h NET CHANGE: smakefile * mesa/src-glu Nov. 25, 1995 v 1.2.4 - created smakefile NET CHANGE: smakefile * mesa/src-aux Nov. 25, 1995 v 1.2.4 - added the necessary pragma calls for X functions to the following: glaux.c - created smakefile NET CHANGE: glaux.c, smakefile * mesa/demos Nov. 25, 1995 v 1.2.4 - added the necessary pragma calls for X functions to the following: xdemo.c, glxdemo.c, offset.c - created smakefile - put #ifndef AMIWIN ... #endif around sleep() calls in xdemo.c since they are not part of AmigaDOS. Dec. 1, 1995 v 1.2.5 - removed AMIWIN defines from xdemo.c, glxdemo.c, offset.c since already defined in include/GL/xmesa.h - modified Smakefile to include header and includes from the AmiTCP4.0 net.lib linkable library to provide unix-compatible sys/time.h and the sleep() function - removed AMIWIN defines in xdemo.c since sleep() now defined NET CHANGE: smakefile * mesa/samples Nov. 25, 1995 v 1.2.4 - added the necessary pragma calls for X functions to the following: oglinfo.c - created smakefile - put #ifndef AMIWIN ... #endif around sleep() in blendxor.c - removed olympic from smakefile targets since <sys/time.h> not defined Dec. 1, 1995 v 1.2.5 - removed AMIWIN defines from oglinfo.c, since already defined in include/GL/xmesa.h - modified Smakefile to include header and includes from the AmiTCP4.0 net.lib linkable library to provide unix-compatible sys/time.h and the sleep() function - removed AMIWIN defines in blendxor.c for sleep() - added AMIWIN defines around _MACHTEN_ in olympic.c since xrandom() functions are not defined in any libraries - added olympic back into the Smakefile targets NET CHANGE: smakefile, olympic.c * mesa/book Nov. 25, 1995 v 1.2.4 - created smakefile - removed accpersp and dof from smakefile targets since the SAS/C compile seems to confuse the near,far variables with near/far memory models. NET CHANGE: smakefile * mesa/windows Dec. 1, 1995 v 1.2.5 - Removed directory to save space since this is only needed for Windows based machines.