intro.html revision 848b8605
1848b8605Smrg<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2848b8605Smrg<html lang="en">
3848b8605Smrg<head>
4848b8605Smrg  <meta http-equiv="content-type" content="text/html; charset=utf-8">
5848b8605Smrg  <title>Mesa Introduction</title>
6848b8605Smrg  <link rel="stylesheet" type="text/css" href="mesa.css">
7848b8605Smrg</head>
8848b8605Smrg<body>
9848b8605Smrg
10848b8605Smrg<div class="header">
11848b8605Smrg  <h1>The Mesa 3D Graphics Library</h1>
12848b8605Smrg</div>
13848b8605Smrg
14848b8605Smrg<iframe src="contents.html"></iframe>
15848b8605Smrg<div class="content">
16848b8605Smrg
17848b8605Smrg<h1>Introduction</h1>
18848b8605Smrg
19848b8605Smrg<p>
20848b8605SmrgMesa is an open-source implementation of the
21848b8605Smrg<a href="http://www.opengl.org/">OpenGL</a> specification -
22848b8605Smrga system for rendering interactive 3D graphics.
23848b8605Smrg</p>
24848b8605Smrg
25848b8605Smrg<p>
26848b8605SmrgA variety of device drivers allows Mesa to be used in many different
27848b8605Smrgenvironments ranging from software emulation to complete hardware acceleration
28848b8605Smrgfor modern GPUs.
29848b8605Smrg</p>
30848b8605Smrg
31848b8605Smrg<p>
32848b8605SmrgMesa ties into several other open-source projects: the 
33848b8605Smrg<a href="http://dri.freedesktop.org/">Direct Rendering 
34848b8605SmrgInfrastructure</a> and <a href="http://x.org">X.org</a> to 
35848b8605Smrgprovide OpenGL support to users of X on Linux, FreeBSD and other operating 
36848b8605Smrgsystems.
37848b8605Smrg</p>
38848b8605Smrg
39848b8605Smrg
40848b8605Smrg
41848b8605Smrg<h1>Project History</h1>
42848b8605Smrg
43848b8605Smrg<p>
44848b8605SmrgThe Mesa project was originally started by Brian Paul.
45848b8605SmrgHere's a short history of the project.
46848b8605Smrg</p>
47848b8605Smrg
48848b8605Smrg<p>
49848b8605SmrgAugust, 1993: I begin working on Mesa in my spare time.  The project
50848b8605Smrghas no name at that point.  I was simply interested in writing a simple
51848b8605Smrg3D graphics library that used the then-new OpenGL API.  I was partially
52848b8605Smrginspired by the <em>VOGL</em> library which emulated a subset of IRIS GL.
53848b8605SmrgI had been programming with IRIS GL since 1991.
54848b8605Smrg</p>
55848b8605Smrg
56848b8605Smrg<p>
57848b8605SmrgNovember 1994: I contact SGI to ask permission to distribute my OpenGL-like
58848b8605Smrggraphics library on the internet.  SGI was generally receptive to the
59848b8605Smrgidea and after negotiations with SGI's legal department, I get permission
60848b8605Smrgto release it.
61848b8605Smrg</p>
62848b8605Smrg
63848b8605Smrg<p>
64848b8605SmrgFebruary 1995: Mesa 1.0 is released on the internet.  I expected that
65848b8605Smrga few people would be interested in it, but not thousands.
66848b8605SmrgI was soon receiving patches, new features and thank-you notes on a
67848b8605Smrgdaily basis.  That encouraged me to continue working on Mesa.  The
68848b8605Smrgname Mesa just popped into my head one day.  SGI had asked me not to use
69848b8605Smrgthe terms <em>"Open"</em> or <em>"GL"</em> in the project name and I didn't
70848b8605Smrgwant to make up a new acronym.  Later, I heard of the Mesa programming
71848b8605Smrglanguage and the Mesa spreadsheet for NeXTStep.
72848b8605Smrg</p>
73848b8605Smrg
74848b8605Smrg<p>
75848b8605SmrgIn the early days, OpenGL wasn't available on too many systems.
76848b8605SmrgIt even took a while for SGI to support it across their product line.
77848b8605SmrgMesa filled a big hole during that time.
78848b8605SmrgFor a lot of people, Mesa was their first introduction to OpenGL.
79848b8605SmrgI think SGI recognized that Mesa actually helped to promote
80848b8605Smrgthe OpenGL API, so they didn't feel threatened by the project.
81848b8605Smrg</p>
82848b8605Smrg
83848b8605Smrg
84848b8605Smrg<p>
85848b8605Smrg1995-1996: I continue working on Mesa both during my spare time and during
86848b8605Smrgmy work hours at the Space Science and Engineering Center at the University
87848b8605Smrgof Wisconsin in Madison.  My supervisor, Bill Hibbard, lets me do this because
88848b8605SmrgMesa is now being using for the <a href="http://www.ssec.wisc.edu/%7Ebillh/vis.html">Vis5D</a> project.
89848b8605Smrg</p><p>
90848b8605SmrgOctober 1996: Mesa 2.0 is released.  It implements the OpenGL 1.1 specification.
91848b8605Smrg</p>
92848b8605Smrg
93848b8605Smrg<p>
94848b8605SmrgMarch 1997: Mesa 2.2 is released.  It supports the new 3dfx Voodoo graphics
95848b8605Smrgcard via the Glide library.  It's the first really popular hardware OpenGL
96848b8605Smrgimplementation for Linux.
97848b8605Smrg</p>
98848b8605Smrg
99848b8605Smrg<p>
100848b8605SmrgSeptember 1998: Mesa 3.0 is released.  It's the first publicly-available
101848b8605Smrgimplementation of the OpenGL 1.2 API.
102848b8605Smrg</p>
103848b8605Smrg
104848b8605Smrg<p>
105848b8605SmrgMarch 1999: I attend my first OpenGL ARB meeting.  I contribute to the
106848b8605Smrgdevelopment of several official OpenGL extensions over the years.
107848b8605Smrg</p>
108848b8605Smrg
109848b8605Smrg<p>
110848b8605SmrgSeptember 1999: I'm hired by Precision Insight, Inc.  Mesa is a key
111848b8605Smrgcomponent of 3D hardware acceleration in the new DRI project for XFree86.
112848b8605SmrgDrivers for 3dfx, 3dLabs, Intel, Matrox and ATI hardware soon follow.
113848b8605Smrg</p>
114848b8605Smrg
115848b8605Smrg<p>
116848b8605SmrgOctober 2001: Mesa 4.0 is released.
117848b8605SmrgIt implements the OpenGL 1.3 specification.
118848b8605Smrg</p>
119848b8605Smrg
120848b8605Smrg
121848b8605Smrg<p>
122848b8605SmrgNovember 2001: I cofounded Tungsten Graphics, Inc. with Keith Whitwell,
123848b8605SmrgJens Owen, David Dawes and Frank LaMonica.
124848b8605SmrgTungsten Graphics was acquired by VMware in December 2008.
125848b8605Smrg</p>
126848b8605Smrg
127848b8605Smrg<p>
128848b8605SmrgNovember 2002: Mesa 5.0 is released.
129848b8605SmrgIt implements the OpenGL 1.4 specification.
130848b8605Smrg</p>
131848b8605Smrg
132848b8605Smrg<p>
133848b8605SmrgJanuary 2003: Mesa 6.0 is released.  It implements the OpenGL 1.5
134848b8605Smrgspecification as well as the GL_ARB_vertex_program and
135848b8605SmrgGL_ARB_fragment_program extensions.
136848b8605Smrg</p>
137848b8605Smrg
138848b8605Smrg<p>
139848b8605SmrgJune 2007: Mesa 7.0 is released, implementing the OpenGL 2.1 specification
140848b8605Smrgand OpenGL Shading Language.
141848b8605Smrg</p>
142848b8605Smrg
143848b8605Smrg<p>
144848b8605Smrg2008: Keith Whitwell and other Tungsten Graphics employees develop
145848b8605Smrg<a href="http://en.wikipedia.org/wiki/Gallium3D">Gallium</a>
146848b8605Smrg- a new GPU abstraction layer.  The latest Mesa drivers are based on
147848b8605SmrgGallium and other APIs such as OpenVG are implemented on top of Gallium.
148848b8605Smrg</p>
149848b8605Smrg
150848b8605Smrg<p>
151848b8605SmrgFebruary 2012: Mesa 8.0 is released, implementing the OpenGL 3.0 specification
152848b8605Smrgand version 1.30 of the OpenGL Shading Language.
153848b8605Smrg</p>
154848b8605Smrg
155848b8605Smrg<p>
156848b8605SmrgOngoing: Mesa is the OpenGL implementation for several types of hardware
157848b8605Smrgmade by Intel, AMD and NVIDIA, plus the VMware virtual GPU.
158848b8605SmrgThere's also several software-based renderers: swrast (the legacy
159848b8605SmrgMesa rasterizer), softpipe (a gallium reference driver) and llvmpipe
160848b8605Smrg(LLVM/JIT-based high-speed rasterizer).
161848b8605SmrgWork continues on the drivers and core Mesa to implement newer versions
162848b8605Smrgof the OpenGL specification.
163848b8605Smrg</p>
164848b8605Smrg
165848b8605Smrg
166848b8605Smrg
167848b8605Smrg<h1>Major Versions</h1>
168848b8605Smrg
169848b8605Smrg<p>
170848b8605SmrgThis is a summary of the major versions of Mesa.
171848b8605SmrgMesa's major version number has been incremented whenever a new version
172848b8605Smrgof the OpenGL specification is implemented.
173848b8605Smrg</p>
174848b8605Smrg
175848b8605Smrg
176848b8605Smrg<h2>Version 9.x features</h2>
177848b8605Smrg<p>
178848b8605SmrgVersion 9.x of Mesa implements the OpenGL 3.1 API.
179848b8605SmrgWhile the driver for Intel Sandy Bridge and Ivy Bridge is the only
180848b8605Smrgdriver to support OpenGL 3.1, many developers across the open-source
181848b8605Smrgcommunity contributed features required for OpenGL 3.1.  The primary
182848b8605Smrgfeatures added since the Mesa 8.0 release are
183848b8605SmrgGL_ARB_texture_buffer_object and GL_ARB_uniform_buffer_object.
184848b8605Smrg</p>
185848b8605Smrg
186848b8605Smrg
187848b8605Smrg<h2>Version 8.x features</h2>
188848b8605Smrg<p>
189848b8605SmrgVersion 8.x of Mesa implements the OpenGL 3.0 API.
190848b8605SmrgThe developers at Intel deserve a lot of credit for implementing most
191848b8605Smrgof the OpenGL 3.0 features in core Mesa, the GLSL compiler as well as
192848b8605Smrgthe i965 driver.
193848b8605Smrg</p>
194848b8605Smrg
195848b8605Smrg
196848b8605Smrg<h2>Version 7.x features</h2>
197848b8605Smrg<p>
198848b8605SmrgVersion 7.x of Mesa implements the OpenGL 2.1 API.  The main feature
199848b8605Smrgof OpenGL 2.x is the OpenGL Shading Language.
200848b8605Smrg</p>
201848b8605Smrg
202848b8605Smrg
203848b8605Smrg<h2>Version 6.x features</h2>
204848b8605Smrg<p>
205848b8605SmrgVersion 6.x of Mesa implements the OpenGL 1.5 API with the following
206848b8605Smrgextensions incorporated as standard features:
207848b8605Smrg</p>
208848b8605Smrg<ul>
209848b8605Smrg<li>GL_ARB_occlusion_query
210848b8605Smrg<li>GL_ARB_vertex_buffer_object
211848b8605Smrg<li>GL_EXT_shadow_funcs
212848b8605Smrg</ul>
213848b8605Smrg<p>
214848b8605SmrgAlso note that several OpenGL tokens were renamed in OpenGL 1.5
215848b8605Smrgfor the sake of consistency.
216848b8605SmrgThe old tokens are still available.
217848b8605Smrg</p>
218848b8605Smrg<pre>
219848b8605SmrgNew Token                   Old Token
220848b8605Smrg------------------------------------------------------------
221848b8605SmrgGL_FOG_COORD_SRC            GL_FOG_COORDINATE_SOURCE
222848b8605SmrgGL_FOG_COORD                GL_FOG_COORDINATE
223848b8605SmrgGL_CURRENT_FOG_COORD        GL_CURRENT_FOG_COORDINATE
224848b8605SmrgGL_FOG_COORD_ARRAY_TYPE     GL_FOG_COORDINATE_ARRAY_TYPE
225848b8605SmrgGL_FOG_COORD_ARRAY_STRIDE   GL_FOG_COORDINATE_ARRAY_STRIDE
226848b8605SmrgGL_FOG_COORD_ARRAY_POINTER  GL_FOG_COORDINATE_ARRAY_POINTER
227848b8605SmrgGL_FOG_COORD_ARRAY          GL_FOG_COORDINATE_ARRAY
228848b8605SmrgGL_SRC0_RGB                 GL_SOURCE0_RGB
229848b8605SmrgGL_SRC1_RGB                 GL_SOURCE1_RGB
230848b8605SmrgGL_SRC2_RGB                 GL_SOURCE2_RGB
231848b8605SmrgGL_SRC0_ALPHA               GL_SOURCE0_ALPHA
232848b8605SmrgGL_SRC1_ALPHA               GL_SOURCE1_ALPHA
233848b8605SmrgGL_SRC2_ALPHA               GL_SOURCE2_ALPHA
234848b8605Smrg</pre>
235848b8605Smrg<p>
236848b8605SmrgSee the
237848b8605Smrg<a href="http://www.opengl.org/documentation/spec.html">
238848b8605SmrgOpenGL specification</a> for more details.
239848b8605Smrg</p>
240848b8605Smrg
241848b8605Smrg
242848b8605Smrg
243848b8605Smrg<h2>Version 5.x features</h2>
244848b8605Smrg<p>
245848b8605SmrgVersion 5.x of Mesa implements the OpenGL 1.4 API with the following
246848b8605Smrgextensions incorporated as standard features:
247848b8605Smrg</p>
248848b8605Smrg<ul>
249848b8605Smrg<li>GL_ARB_depth_texture
250848b8605Smrg<li>GL_ARB_shadow
251848b8605Smrg<li>GL_ARB_texture_env_crossbar
252848b8605Smrg<li>GL_ARB_texture_mirror_repeat
253848b8605Smrg<li>GL_ARB_window_pos
254848b8605Smrg<li>GL_EXT_blend_color
255848b8605Smrg<li>GL_EXT_blend_func_separate
256848b8605Smrg<li>GL_EXT_blend_logic_op
257848b8605Smrg<li>GL_EXT_blend_minmax
258848b8605Smrg<li>GL_EXT_blend_subtract
259848b8605Smrg<li>GL_EXT_fog_coord
260848b8605Smrg<li>GL_EXT_multi_draw_arrays
261848b8605Smrg<li>GL_EXT_point_parameters
262848b8605Smrg<li>GL_EXT_secondary_color
263848b8605Smrg<li>GL_EXT_stencil_wrap
264848b8605Smrg<li>GL_EXT_texture_lod_bias (plus, a per-texture LOD bias parameter)
265848b8605Smrg<li>GL_SGIS_generate_mipmap
266848b8605Smrg</ul>
267848b8605Smrg
268848b8605Smrg
269848b8605Smrg<h2>Version 4.x features</h2>
270848b8605Smrg
271848b8605Smrg<p>
272848b8605SmrgVersion 4.x of Mesa implements the OpenGL 1.3 API with the following
273848b8605Smrgextensions incorporated as standard features:
274848b8605Smrg</p>
275848b8605Smrg
276848b8605Smrg<ul>
277848b8605Smrg<li>GL_ARB_multisample
278848b8605Smrg<li>GL_ARB_multitexture
279848b8605Smrg<li>GL_ARB_texture_border_clamp
280848b8605Smrg<li>GL_ARB_texture_compression
281848b8605Smrg<li>GL_ARB_texture_cube_map
282848b8605Smrg<li>GL_ARB_texture_env_add
283848b8605Smrg<li>GL_ARB_texture_env_combine
284848b8605Smrg<li>GL_ARB_texture_env_dot3
285848b8605Smrg<li>GL_ARB_transpose_matrix
286848b8605Smrg</ul>
287848b8605Smrg
288848b8605Smrg<h2>Version 3.x features</h2>
289848b8605Smrg
290848b8605Smrg<p>
291848b8605SmrgVersion 3.x of Mesa implements the OpenGL 1.2 API with the following
292848b8605Smrgfeatures:
293848b8605Smrg</p>
294848b8605Smrg<ul>
295848b8605Smrg<li>BGR, BGRA and packed pixel formats
296848b8605Smrg<li>New texture border clamp mode
297848b8605Smrg<li>glDrawRangeElements()
298848b8605Smrg<li>standard 3-D texturing
299848b8605Smrg<li>advanced MIPMAP control
300848b8605Smrg<li>separate specular color interpolation
301848b8605Smrg</ul>
302848b8605Smrg
303848b8605Smrg
304848b8605Smrg<h2>Version 2.x features</h2>
305848b8605Smrg<p>
306848b8605SmrgVersion 2.x of Mesa implements the OpenGL 1.1 API with the following
307848b8605Smrgfeatures.
308848b8605Smrg</p>
309848b8605Smrg<ul>
310848b8605Smrg<li>Texture mapping:
311848b8605Smrg	<ul>
312848b8605Smrg	<li>glAreTexturesResident
313848b8605Smrg	<li>glBindTexture
314848b8605Smrg	<li>glCopyTexImage1D
315848b8605Smrg	<li>glCopyTexImage2D
316848b8605Smrg	<li>glCopyTexSubImage1D
317848b8605Smrg	<li>glCopyTexSubImage2D
318848b8605Smrg	<li>glDeleteTextures
319848b8605Smrg	<li>glGenTextures
320848b8605Smrg	<li>glIsTexture
321848b8605Smrg	<li>glPrioritizeTextures
322848b8605Smrg	<li>glTexSubImage1D
323848b8605Smrg	<li>glTexSubImage2D
324848b8605Smrg	</ul>
325848b8605Smrg<li>Vertex Arrays:
326848b8605Smrg	<ul>
327848b8605Smrg	<li>glArrayElement
328848b8605Smrg	<li>glColorPointer
329848b8605Smrg	<li>glDrawElements
330848b8605Smrg	<li>glEdgeFlagPointer
331848b8605Smrg	<li>glIndexPointer
332848b8605Smrg	<li>glInterleavedArrays
333848b8605Smrg	<li>glNormalPointer
334848b8605Smrg	<li>glTexCoordPointer
335848b8605Smrg	<li>glVertexPointer
336848b8605Smrg	</ul>
337848b8605Smrg<li>Client state management:
338848b8605Smrg	<ul>
339848b8605Smrg	<li>glDisableClientState
340848b8605Smrg	<li>glEnableClientState
341848b8605Smrg	<li>glPopClientAttrib
342848b8605Smrg	<li>glPushClientAttrib
343848b8605Smrg	</ul>
344848b8605Smrg<li>Misc:
345848b8605Smrg	<ul>
346848b8605Smrg	<li>glGetPointer
347848b8605Smrg	<li>glIndexub
348848b8605Smrg	<li>glIndexubv
349848b8605Smrg	<li>glPolygonOffset
350848b8605Smrg	</ul>
351848b8605Smrg</ul>
352848b8605Smrg
353848b8605Smrg</div>
354848b8605Smrg</body>
355848b8605Smrg</html>
356