[1] | 1 | TinyGL 0.4 (c) 1997-2002 Fabrice Bellard. |
---|
| 2 | |
---|
| 3 | General Description: |
---|
| 4 | -------------------- |
---|
| 5 | |
---|
| 6 | TinyGL is intended to be a very small implementation of a subset of |
---|
| 7 | OpenGL* for embedded systems or games. It is a software only |
---|
| 8 | implementation. Only the main OpenGL calls are implemented. All the |
---|
| 9 | calls I considered not important are simply *not implemented*. |
---|
| 10 | |
---|
| 11 | The main strength of TinyGL is that it is fast and simple because it |
---|
| 12 | has not to be exactly compatible with OpenGL. In particular, the |
---|
| 13 | texture mapping and the geometrical transformations are very fast. |
---|
| 14 | |
---|
| 15 | The main features of TinyGL are: |
---|
| 16 | |
---|
| 17 | - Header compatible with OpenGL (the headers are adapted from the very good |
---|
| 18 | Mesa by Brian Paul et al.) |
---|
| 19 | |
---|
| 20 | - Zlib-like licence for easy integration in commercial designs (read |
---|
| 21 | the LICENCE file). |
---|
| 22 | |
---|
| 23 | - Subset of GLX for easy testing with X Window. |
---|
| 24 | |
---|
| 25 | - GLX like API (NGLX) to use it with NanoX in MicroWindows/NanoX. |
---|
| 26 | |
---|
| 27 | - Subset of BGLView under BeOS. |
---|
| 28 | |
---|
| 29 | - OpenGL like lightening. |
---|
| 30 | |
---|
| 31 | - Complete OpenGL selection mode handling for object picking. |
---|
| 32 | |
---|
| 33 | - 16 bit Z buffer. 16/24/32 bit RGB rendering. High speed dithering to |
---|
| 34 | paletted 8 bits if needed. High speed conversion to 24 bit packed |
---|
| 35 | pixel or 32 bit RGBA if needed. |
---|
| 36 | |
---|
| 37 | - Fast Gouraud shadding optimized for 16 bit RGB. |
---|
| 38 | |
---|
| 39 | - Fast texture mapping capabilities, with perspective correction and |
---|
| 40 | texture objects. |
---|
| 41 | |
---|
| 42 | - 32 bit float only arithmetic. |
---|
| 43 | |
---|
| 44 | - Very small: compiled code size of about 40 kB on x86. The file |
---|
| 45 | src/zfeatures.h can be used to remove some unused features from |
---|
| 46 | TinyGL. |
---|
| 47 | |
---|
| 48 | - C sources for GCC on 32/64 bit architectures. It has been tested |
---|
| 49 | succesfully on x86-Linux and sparc-Solaris. |
---|
| 50 | |
---|
| 51 | Examples: |
---|
| 52 | --------- |
---|
| 53 | |
---|
| 54 | I took three simple examples from the Mesa package to test the main |
---|
| 55 | functions of TinyGL. You can link them to either TinyGL, Mesa or any |
---|
| 56 | other OpenGL/GLX implementation. You can also compile them with |
---|
| 57 | Microwindows. |
---|
| 58 | |
---|
| 59 | - texobj illustrates the use of texture objects. Its shows the speed |
---|
| 60 | of TinyGL in this case. |
---|
| 61 | |
---|
| 62 | - glutmech comes from the GLUT packages. It is much bigger and slower |
---|
| 63 | because it uses the lightening. I have just included some GLU |
---|
| 64 | functions and suppressed the GLUT related code to make it work. It |
---|
| 65 | shows the display list handling of TinyGL in particular. You can look |
---|
| 66 | at the source code to learn the keys to move the robot. The key 't' |
---|
| 67 | toggles between shaded rendering and wire frame. |
---|
| 68 | |
---|
| 69 | - You can download and compile the VReng project to see that TinyGL |
---|
| 70 | has been successfully used in a big project |
---|
| 71 | (http://www-inf.enst.fr/vreng). |
---|
| 72 | |
---|
| 73 | Architecture: |
---|
| 74 | ------------- |
---|
| 75 | |
---|
| 76 | TinyGL is made up four main modules: |
---|
| 77 | |
---|
| 78 | - Mathematical routines (zmath). |
---|
| 79 | |
---|
| 80 | - OpenGL-like emulation (zgl). |
---|
| 81 | |
---|
| 82 | - Z buffer and rasterisation (zbuffer). |
---|
| 83 | |
---|
| 84 | - GLX interface (zglx). |
---|
| 85 | |
---|
| 86 | To use TinyGL in an embedded system, you should look at the GLX layer |
---|
| 87 | and modify it to suit your need. Adding a more user friendly |
---|
| 88 | developper layer (as in Mesa) may be useful. |
---|
| 89 | |
---|
| 90 | Notes - limitations: |
---|
| 91 | -------------------- |
---|
| 92 | |
---|
| 93 | - See the file 'LIMITATIONS' to see the current functions supported by the API. |
---|
| 94 | |
---|
| 95 | - The multithreading could be easily implemented since no global state |
---|
| 96 | is maintainted. The library gets the current context with a function |
---|
| 97 | which can be modified. |
---|
| 98 | |
---|
| 99 | - The lightening is not very fast. I supposed that in most games the |
---|
| 100 | lightening is computed by the 3D engine. |
---|
| 101 | |
---|
| 102 | - Some changes are needed for 64 bit pointers for the handling of |
---|
| 103 | arrays of float with the GLParam union. |
---|
| 104 | |
---|
| 105 | - List sharing is partialy supported in the source, but not by the |
---|
| 106 | current TinyGLX implementation (is it really useful ?). |
---|
| 107 | |
---|
| 108 | - No user clipping planes are supported. |
---|
| 109 | |
---|
| 110 | - No color index mode (no longer useful !) |
---|
| 111 | |
---|
| 112 | - The mipmapping is not implemented. |
---|
| 113 | |
---|
| 114 | - The perspecture correction in the mapping code does not use W but |
---|
| 115 | 1/Z. In any 'normal scene' it should work. |
---|
| 116 | |
---|
| 117 | - The resizing of the viewport in TinyGLX ensures that the width and |
---|
| 118 | the height are multiples of 4. This is not optimal because some pixels |
---|
| 119 | of the window may not be refreshed. |
---|
| 120 | |
---|
| 121 | Why ? |
---|
| 122 | ----- |
---|
| 123 | |
---|
| 124 | TinyGL was developped as a student project for a Virtual Reality |
---|
| 125 | network system called VReng (see the VReng home page at |
---|
| 126 | http://www-inf.enst.fr/vreng). |
---|
| 127 | |
---|
| 128 | At that time (January 1997), my initial project was to write my own 3D |
---|
| 129 | rasterizer based on some old sources I wrote. But I realized that it |
---|
| 130 | would be better to use OpenGL to work on any platform. My problem was |
---|
| 131 | that I wanted to use texture mapping which was (and is still) quite |
---|
| 132 | slower on many software OpenGL implementation. I could have modified |
---|
| 133 | Mesa to suit my needs, but I really wanted to use my old sources for |
---|
| 134 | that project. |
---|
| 135 | |
---|
| 136 | I finally decided to use the same syntax as OpenGL but with my own |
---|
| 137 | libraries, thinking that later it could ease the porting of VReng to |
---|
| 138 | OpenGL. |
---|
| 139 | |
---|
| 140 | Now VReng is at last compatible with OpenGL, and I managed to patch |
---|
| 141 | TinyGL so that VReng can still work with it without any modifications. |
---|
| 142 | |
---|
| 143 | Since TinyGL may be useful for some people, especially in the world of |
---|
| 144 | embedded designs, I decided to release it 'as is', otherwise, it would |
---|
| 145 | have been lost on my hard disk ! |
---|
| 146 | |
---|
| 147 | ------------------------------------------------------------------------------ |
---|
| 148 | * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. |
---|
| 149 | ------------------------------------------------------------------------------ |
---|
| 150 | Fabrice Bellard. |
---|