
                         Mesa / BeOS Information



* Introduction

Brian Paul added in Mesa 3.1 a driver for BeOS R4.5 operating system.
This driver implements a clone of the BGLView class.  This class,
derived from BView, allows OpenGL rendering into any BeOS window.  His
driver was updated in Mesa 4.1 and again in version 6.1 by Philippe
Houdoin, who's maintaining this driver since.

Any application which uses the BGLView should be able to use Mesa
instead of Be's OpenGL without changing any code.

Since Be's OpenGL implementation (as of R5) is basically just the
SGI sample implementation, it's pretty slow.  You'll see that Mesa
is considerably faster.


* Source Code

The source code for the driver is in src/mesa/drivers/beos/ directory.
It's not 100% finished at this time but many GLUT-based demos are
working.  No optimizations have been made at this time.


* Compiling

Since Mesa 6.x, it can be build under BeOS with both the R5 builtin gcc version
or more recent gcc versions available for BeOS, like this gcc version 2.95.3 for BeOS 
you can find at http://www.bebits.com/app/2157.
Anyway, keep in mind that to take full advantage of Mesa x86 optimizations, you better
want to use gcc 2.95.3 or sooner versions...

To build Mesa-powered BeOS libGL.so version, open an Terminal window,
move to Mesa root folder and type this command:

$ make beos

Note that the "beos" argument is only needed the first time to setup build config.
Next times, typing "make" will be enough.

When it finishes the Mesa based libGL.so library for
BeOS will be in the lib/ directory, along libglut.so library.
Several demo/test programs should have been build too under progs/* folders.
If it stop when building one of the progs/* programs, you may want to ignore it
and force make to move on next target by adding the -k make option:

$ cd progs
$ make -k

To install it as Be's default libGL.so replacement, put it in your 
/boot/home/config/lib/ directory. All your GL/GLUT apps will use 
the Mesa based then. 

By default, it build a non-debug version library.
The x86 (MMX, SSE and 3DNOW) optimizations are also supported for x86 target.
For PowerPC BeOS flavor, sorry, Mesa don't have ppc (Altivec) optimizations
yet.

To build a DEBUG version, type instead this :

$ DEBUG=1 make


* Example Programs

Look under progs/beos/ for some BGLView-based programs.
You should find under progs/samples and progs/redbook directories GLUT-based programs too.
They all should have been compiled along with the Mesa library.


* GLUT

A beta version of GLUT 3.7 port for BeOS, made by Jake Hamby, can be found at 
http://anobject.com/jehamby/Code/Glut-3.7-x86.zip.
This is the version currently included in Mesa source code, and
build in lib/libglut.so.
 
A previous 3.5 version of this GLUT BeOS port used to be available at
http://home.beoscentral.com/jehamby/Glut-3.5-x86.zip.

They're special versions of GLUT for the BeOS platform.  I don't
believe Mark Kilgard's normal GLUT distribution includes BeOS
support.


* Special Features

Mesa's implementation of the BGLView class has an extra member
function:  CopySubBufferMESA().  It basically works like SwapBuffers()
but it only copies a sub region from the back buffer to the front
buffer.  This is a useful optimization for some applications.
If you use this method in your code be sure that you check at runtime
that you're actually using Mesa (with glGetString) so you don't
cause a fatal error when running with Be's OpenGL.


* Work Left To Do

- BDirectWindow single buffering support is not implemented yet.
- Color index mode is not implemented yet.
- Reading pixels from the front buffer not implemented yet.
- There is also a BGLScreen class in BeOS for full-screen OpenGL rendering.
  This should also be implemented for Mesa.
- Multiple renderers add-ons support, first step toward hardware acceleration
  support.

* Other contributors to this BeOS port

Jake Hamby                      jhamby <at> anobject <dot> com
Marcin Konicki                  ahwayakchih <at> neoni <dot> net
Francois Revol                  revol <at> free <dot> fr
Nathan Whitehorn                nathanw <at> uchicago <dot> edu


* Older BeOS Driver

Mesa 2.6 had an earlier BeOS driver.  It was based on Mesa's Off-screen
rendering interface, not BGLView.  If you're interested in the older
driver you should get Mesa 2.6.


* BeOS and Glide

Mesa 3.0 supported the 3Dfx/Glide library on Beos.  Download Mesa 3.0
if interested.  Ideally, the 3Dfx/Glide support should be updated to
work with the new Mesa 3.1 BGLView implementation.

The Glide library hasn't been updated for BeOS R4 and newer, to my knowledge,
as of February, 1999.


----------------------------------------------------------------------
$Id: README.BEOS,v 1.1.1.1 2012/03/29 17:22:08 uid42307 Exp $
