Next | Prev | Up | Top | Contents | Index
General Debugging Tips
Here are some general debugging tips that are useful when debugging an OpenGL program.
- OpenGL never signals errors but simply records them; determining whether an error occurred is up to the user. During the debugging phase, your program should call glGetError() to look for errors frequently (for example, once per redraw) until glGetError() returns GL_NO_ERROR. While this slows down performance somewhat, it helps you debug the program efficiently. You can use ogldebug to automatically call glGetError() after every OpenGL call.
- Use an iterative coding process: add some graphics-related code, build and test to ensure expected results, and repeat as necessary.
- Be careful with OpenGL enumerated constants that are similar in name. For example, glBegin(GL_LINES) works; glBegin(GL_LINE) does not. Using glGetError() can help to detect problems like this (it reports GL_INVALID_ENUM for this specific case).
- Use only per-vertex operations in a glBegin()/glEnd() sequence. Within a glBegin()/glEnd() sequence, the only graphics commands that may be used are commands for setting materials, colors, normals, edge flags, texture coordinates, surface parametric coordinates, and vertex coordinates. The use of any other graphics command is illegal. The exact list of allowable commands is given in the reference page for glBegin(). Even if other calls appear to work, they are not guaranteed to work in the future and may have severe performance penalties.
- If your program is too slow, see the chapters on tuning in this guide for help on increasing performance.
- Check for matching glPushMatrix() and glPopMatrix() calls.
- Check matrix mode state information. Generally, an application should stay in GL_MODELVIEW mode, but odd visual effects can occur if the matrix mode isn't right.
Next | Prev | Up | Top | Contents | Index