forked from KolibriOS/kolibrios
switch build system to Tup
git-svn-id: svn://kolibrios.org@5098 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
TinyGL 0.4 (c) 1997-2002 Fabrice Bellard.
|
||||
|
||||
General Description:
|
||||
--------------------
|
||||
|
||||
TinyGL is intended to be a very small implementation of a subset of
|
||||
OpenGL* for embedded systems or games. It is a software only
|
||||
implementation. Only the main OpenGL calls are implemented. All the
|
||||
calls I considered not important are simply *not implemented*.
|
||||
|
||||
The main strength of TinyGL is that it is fast and simple because it
|
||||
has not to be exactly compatible with OpenGL. In particular, the
|
||||
texture mapping and the geometrical transformations are very fast.
|
||||
|
||||
The main features of TinyGL are:
|
||||
|
||||
- Header compatible with OpenGL (the headers are adapted from the very good
|
||||
Mesa by Brian Paul et al.)
|
||||
|
||||
- Zlib-like licence for easy integration in commercial designs (read
|
||||
the LICENCE file).
|
||||
|
||||
- Subset of GLX for easy testing with X Window.
|
||||
|
||||
- GLX like API (NGLX) to use it with NanoX in MicroWindows/NanoX.
|
||||
|
||||
- Subset of BGLView under BeOS.
|
||||
|
||||
- OpenGL like lightening.
|
||||
|
||||
- Complete OpenGL selection mode handling for object picking.
|
||||
|
||||
- 16 bit Z buffer. 16/24/32 bit RGB rendering. High speed dithering to
|
||||
paletted 8 bits if needed. High speed conversion to 24 bit packed
|
||||
pixel or 32 bit RGBA if needed.
|
||||
|
||||
- Fast Gouraud shadding optimized for 16 bit RGB.
|
||||
|
||||
- Fast texture mapping capabilities, with perspective correction and
|
||||
texture objects.
|
||||
|
||||
- 32 bit float only arithmetic.
|
||||
|
||||
- Very small: compiled code size of about 40 kB on x86. The file
|
||||
src/zfeatures.h can be used to remove some unused features from
|
||||
TinyGL.
|
||||
|
||||
- C sources for GCC on 32/64 bit architectures. It has been tested
|
||||
succesfully on x86-Linux and sparc-Solaris.
|
||||
|
||||
Examples:
|
||||
---------
|
||||
|
||||
I took three simple examples from the Mesa package to test the main
|
||||
functions of TinyGL. You can link them to either TinyGL, Mesa or any
|
||||
other OpenGL/GLX implementation. You can also compile them with
|
||||
Microwindows.
|
||||
|
||||
- texobj illustrates the use of texture objects. Its shows the speed
|
||||
of TinyGL in this case.
|
||||
|
||||
- glutmech comes from the GLUT packages. It is much bigger and slower
|
||||
because it uses the lightening. I have just included some GLU
|
||||
functions and suppressed the GLUT related code to make it work. It
|
||||
shows the display list handling of TinyGL in particular. You can look
|
||||
at the source code to learn the keys to move the robot. The key 't'
|
||||
toggles between shaded rendering and wire frame.
|
||||
|
||||
- You can download and compile the VReng project to see that TinyGL
|
||||
has been successfully used in a big project
|
||||
(http://www-inf.enst.fr/vreng).
|
||||
|
||||
Architecture:
|
||||
-------------
|
||||
|
||||
TinyGL is made up four main modules:
|
||||
|
||||
- Mathematical routines (zmath).
|
||||
|
||||
- OpenGL-like emulation (zgl).
|
||||
|
||||
- Z buffer and rasterisation (zbuffer).
|
||||
|
||||
- GLX interface (zglx).
|
||||
|
||||
To use TinyGL in an embedded system, you should look at the GLX layer
|
||||
and modify it to suit your need. Adding a more user friendly
|
||||
developper layer (as in Mesa) may be useful.
|
||||
|
||||
Notes - limitations:
|
||||
--------------------
|
||||
|
||||
- See the file 'LIMITATIONS' to see the current functions supported by the API.
|
||||
|
||||
- The multithreading could be easily implemented since no global state
|
||||
is maintainted. The library gets the current context with a function
|
||||
which can be modified.
|
||||
|
||||
- The lightening is not very fast. I supposed that in most games the
|
||||
lightening is computed by the 3D engine.
|
||||
|
||||
- Some changes are needed for 64 bit pointers for the handling of
|
||||
arrays of float with the GLParam union.
|
||||
|
||||
- List sharing is partialy supported in the source, but not by the
|
||||
current TinyGLX implementation (is it really useful ?).
|
||||
|
||||
- No user clipping planes are supported.
|
||||
|
||||
- No color index mode (no longer useful !)
|
||||
|
||||
- The mipmapping is not implemented.
|
||||
|
||||
- The perspecture correction in the mapping code does not use W but
|
||||
1/Z. In any 'normal scene' it should work.
|
||||
|
||||
- The resizing of the viewport in TinyGLX ensures that the width and
|
||||
the height are multiples of 4. This is not optimal because some pixels
|
||||
of the window may not be refreshed.
|
||||
|
||||
Why ?
|
||||
-----
|
||||
|
||||
TinyGL was developped as a student project for a Virtual Reality
|
||||
network system called VReng (see the VReng home page at
|
||||
http://www-inf.enst.fr/vreng).
|
||||
|
||||
At that time (January 1997), my initial project was to write my own 3D
|
||||
rasterizer based on some old sources I wrote. But I realized that it
|
||||
would be better to use OpenGL to work on any platform. My problem was
|
||||
that I wanted to use texture mapping which was (and is still) quite
|
||||
slower on many software OpenGL implementation. I could have modified
|
||||
Mesa to suit my needs, but I really wanted to use my old sources for
|
||||
that project.
|
||||
|
||||
I finally decided to use the same syntax as OpenGL but with my own
|
||||
libraries, thinking that later it could ease the porting of VReng to
|
||||
OpenGL.
|
||||
|
||||
Now VReng is at last compatible with OpenGL, and I managed to patch
|
||||
TinyGL so that VReng can still work with it without any modifications.
|
||||
|
||||
Since TinyGL may be useful for some people, especially in the world of
|
||||
embedded designs, I decided to release it 'as is', otherwise, it would
|
||||
have been lost on my hard disk !
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||
------------------------------------------------------------------------------
|
||||
Fabrice Bellard.
|
||||
Reference in New Issue
Block a user