Mesa Frequently Asked Questions
+Frequently Asked Questions
Last updated: 19 September 2018 --
Index
-1. High-level Questions and Answers --2. Compilation and Installation Problems -
-3. Runtime / Rendering Problems -
-4. Developer Questions -
-
-
+
-
+
- High-level Questions and Answers +
- Compilation and Installation Problems +
- Runtime / Rendering Problems +
- Developer Questions +
1. High-level Questions and Answers
- -1. High-level Questions and Answers
- -1.1 What is Mesa?
+1.1 What is Mesa?
Mesa is an open-source implementation of the OpenGL specification. OpenGL is a programming library for writing interactive 3D applications. @@ -106,17 +96,17 @@ the Xlib API:
libGL.so
, contains everything (the
+ programming API, the GLX functions and all the rendering code).
Alternately, Mesa acts as the core for a number of OpenGL hardware drivers within the DRI (Direct Rendering Infrastructure):
-
-
- The libGL.so library provides the GL and GLX API functions, a GLX - protocol encoder, and a device driver loader. -
- The device driver modules (such as r200_dri.so) contain a built-in - copy of the core Mesa code. +
- The
libGL.so
library provides the GL and GLX API functions, + a GLX protocol encoder, and a device driver loader. + - The device driver modules (such as
r200_dri.so
) contain + a built-in copy of the core Mesa code. - The X server loads the GLX module.
The GLX module decodes incoming GLX protocol and dispatches the commands
to a rendering module.
@@ -136,7 +126,7 @@ Just follow the Mesa compilation instructions.
1.6 Are there other open-source implementations of OpenGL?
-Yes, SGI's +Yes, SGI's OpenGL Sample Implementation (SI) is available. The SI was written during the time that OpenGL was originally designed. Unfortunately, development of the SI has stagnated. @@ -148,8 +138,9 @@ Mesa is much more up to date with modern features and extensions. an open-source implementation of OpenGL ES for mobile devices.
-miniGL -is a subset of OpenGL for PalmOS devices. +miniGL +is a subset of OpenGL for PalmOS devices. The website is gone, but the source +code can still be found on sourceforge.net.
TinyGL @@ -179,22 +170,16 @@ popular and feature-complete.
+2. Compilation and Installation Problems
-
-
- - -2. Compilation and Installation Problems
- - -2.1 What's the easiest way to install Mesa?
+2.1 What's the easiest way to install Mesa?
If you're using a Linux-based system, your distro CD most likely already has Mesa packages (like RPM or DEB) which you can easily install.
-2.2 I get undefined symbols such as bgnpolygon, v3f, etc...
+2.2 I get undefined symbols such as bgnpolygon, v3f, etc...
You're application is written in IRIS GL, not OpenGL. IRIS GL was the predecessor to OpenGL and is a different thing (almost) @@ -203,38 +188,49 @@ Mesa's not the solution.
-2.3 Where is the GLUT library?
+2.3 Where is the GLUT library?
-GLUT (OpenGL Utility Toolkit) is no longer in the separate MesaGLUT-x.y.z.tar.gz file. +GLUT (OpenGL Utility Toolkit) is no longer in the separate +
-MesaGLUT-x.y.z.tar.gz
file. If you don't already have GLUT installed, you should grab freeglut.2.4 Where is the GLw library?
+2.4 Where is the GLw library?
-GLw (OpenGL widget library) is now available from a separate git repository. Unless you're using very old Xt/Motif applications with OpenGL, you shouldn't need it. +GLw (OpenGL widget library) is now available from a separate git repository. Unless you're using very old Xt/Motif applications with OpenGL, you shouldn't need it.
2.5 What's the proper place for the libraries and headers?
On Linux-based systems you'll want to follow the -Linux ABI standard. +Linux ABI standard. Basically you'll want the following:
--
-
- /usr/include/GL/gl.h - the main OpenGL header -
- /usr/include/GL/glu.h - the OpenGL GLU (utility) header -
- /usr/include/GL/glx.h - the OpenGL GLX header -
- /usr/include/GL/glext.h - the OpenGL extensions header -
- /usr/include/GL/glxext.h - the OpenGL GLX extensions header -
- /usr/include/GL/osmesa.h - the Mesa off-screen rendering header -
- /usr/lib/libGL.so - a symlink to libGL.so.1 -
- /usr/lib/libGL.so.1 - a symlink to libGL.so.1.xyz -
- /usr/lib/libGL.so.xyz - the actual OpenGL/Mesa library. xyz denotes the
+
-
+
/usr/include/GL/gl.h
+- the main OpenGL header +
/usr/include/GL/glu.h
+- the OpenGL GLU (utility) header +
/usr/include/GL/glx.h
+- the OpenGL GLX header +
/usr/include/GL/glext.h
+- the OpenGL extensions header +
/usr/include/GL/glxext.h
+- the OpenGL GLX extensions header +
/usr/include/GL/osmesa.h
+- the Mesa off-screen rendering header +
/usr/lib/libGL.so
+- a symlink to
libGL.so.1
+ /usr/lib/libGL.so.1
+- a symlink to
libGL.so.1.xyz
+ /usr/lib/libGL.so.xyz
+- the actual OpenGL/Mesa library. xyz denotes the Mesa version number. -
When configuring Mesa, there are three meson options that affect the install location that you should take care with:
---prefix
, @@ -253,13 +249,11 @@ After determining the correct values for the install location, configure Mesa withmeson configure --prefix=/usr --libdir=xxx -D dri-drivers-path=xxx
and then install withsudo ninja install
.
-
-3. Runtime / Rendering Problems
+3. Runtime / Rendering Problems
-3.1 Rendering is slow / why isn't my graphics hardware being used?
+3.1 Rendering is slow / why isn't my graphics hardware being used?
If Mesa can't use its hardware accelerated drivers it falls back on one of its software renderers. (eg. classic swrast, softpipe or llvmpipe) @@ -280,60 +274,57 @@ If your DRI-based driver isn't working, go to the
-3.2 I'm seeing errors in depth (Z) buffering. Why?
+3.2 I'm seeing errors in depth (Z) buffering. Why?
Make sure the ratio of the far to near clipping planes isn't too great. Look -here +here for details.
Mesa uses a 16-bit depth buffer by default which is smaller and faster to clear than a 32-bit buffer but not as accurate. If you need a deeper you can modify the parameters to -
-glXChooseVisual
in your code. +glXChooseVisual
in your code.3.3 Why Isn't depth buffering working at all?
+3.3 Why Isn't depth buffering working at all?
-Be sure you're requesting a depth buffered-visual. If you set the MESA_DEBUG -environment variable it will warn you about trying to enable depth testing -when you don't have a depth buffer. +Be sure you're requesting a depth buffered-visual. If you set the +
MESA_DEBUG
environment variable it will warn you about trying +to enable depth testing when you don't have a depth buffer.Specifically, make sure
glutInitDisplayMode
is being called withGLUT_DEPTH
orglXChooseVisual
is being -called with a non-zero value for GLX_DEPTH_SIZE. +called with a non-zero value forGLX_DEPTH_SIZE
.This discussion applies to stencil buffers, accumulation buffers and alpha channels too.
-3.4 Why does glGetString() always return NULL?
+3.4 Why does
glGetString()
always returnNULL
?Be sure you have an active/current OpenGL rendering context before -calling glGetString. +calling
-glGetString
.3.5 GL_POINTS and GL_LINES don't touch the right pixels
+3.5
GL_POINTS
andGL_LINES
don't touch the +right pixels-If you're trying to draw a filled region by using GL_POINTS or GL_LINES -and seeing holes or gaps it's because of a float-to-int rounding problem. -But this is not a bug. -See Appendix H of the OpenGL Programming Guide - "OpenGL Correctness Tips". -Basically, applying a translation of (0.375, 0.375, 0.0) to your coordinates -will fix the problem. +If you're trying to draw a filled region by using
-GL_POINTS
or +GL_LINES
and seeing holes or gaps it's because of a float-to-int +rounding problem. But this is not a bug. See Appendix H of the OpenGL +Programming Guide - "OpenGL Correctness Tips". Basically, applying a +translation of (0.375, 0.375, 0.0) to your coordinates will fix the problem.
-
- -4. Developer Questions
+4. Developer Questions
-4.1 How can I contribute?
+4.1 How can I contribute?
First, join the mesa-dev mailing list. That's where Mesa development is discussed. @@ -347,7 +338,7 @@ You should read it. extensions, writing hardware drivers (for the DRI), and code optimization.
-4.2 How do I write a new device driver?
+4.2 How do I write a new device driver?
Unfortunately, writing a device driver isn't easy. It requires detailed understanding of OpenGL, the Mesa code, and your @@ -371,7 +362,8 @@ the archives) is a good way to get information.
-4.3 Why isn't GL_EXT_texture_compression_s3tc implemented in Mesa?
+4.3 Why isn't
GL_EXT_texture_compression_s3tc
implemented in +Mesa?Oh but it is! Prior to 2nd October 2017, the Mesa project did not include s3tc support due to intellectual property (IP) and/or patent issues around the s3tc