[About] [News] [Documentation] [Screenshots]
About BuGLe
BuGLe is a tool for OpenGL debugging, implemented as a wrapper library that sits between your program and OpenGL. While still in development, it can already do the following:
- Dump a textual log of all GL calls made.
- Take a screenshot or capture a video.
- Call glGetError after each call to check for errors, and wrap glGetError so that this checking is transparent to your program.
- Capture and display statistics (such as frame rate)
- Force a wireframe mode
- Recover a backtrace from segmentation faults inside the driver, even if the driver is compiled without symbols.
In addition, there is a debugger (gldb-gui) that lets you set breakpoints and examine backtraces. It also lets you examine OpenGL state, shaders, textures, buffers etc., and drop into gdb to see what is going wrong.
You can download the source from the project page, or view the documentation online. BuGLe is also available in Gentoo portage and the BSD ports collection (there is no guarantee that it is up-to-date, however). Bugs should be filed on the trac system.
Requirements
- GCC 3.2 or later (4.0 is broken, but 4.1 works).
- FFmpeg is needed for video capture
- GTK+ is required for gldb-gui
- GtkGLExt and GLEW are highly recommended for gldb-gui (without them, the texture display will not work)
Example
Here is an extract from a log, generated from an application I am writing. Note that GLenums are displayed by name, and pointers are followed to the correct number of elements.
stats.fps: 22.671
stats.fragments: 52335
stats.triangles: 99732
trace.call: glXSwapBuffers(0x8117720, 0x01c00021)
trace.call: glXMakeCurrent(0x8117720, 0x01c00021, 0x8444800) = 1
trace.call: glBindBufferARB(GL_ARRAY_BUFFER, 1)
trace.call: glMapBufferARB(GL_ARRAY_BUFFER, GL_READ_WRITE) = 0x45c3c000
trace.call: glUnmapBufferARB(GL_ARRAY_BUFFER) = GL_TRUE
trace.call: glBindBufferARB(GL_ARRAY_BUFFER, 0)
trace.call: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
trace.call: glLoadMatrixd(0xbfffe610 -> { { 0, -0.29661, 1.22295, 0 }, { 1.22295, 0, 0, 0 }, { 0, 1.18644, 0.305739, 0 }, { 0.037888, 1.61781, -1.52576, 1 } })
trace.call: glActiveTextureARB(GL_TEXTURE0)
trace.call: glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, 0xbfffe5d0 -> { 0.778524, 0.778524, 0.569631, 0 })
trace.call: glGetIntegerv(GL_MAX_TEXTURE_UNITS, 0xbfffe688 -> 4)
trace.call: glBindBufferARB(GL_ARRAY_BUFFER, 1)
trace.call: glVertexPointer(3, GL_FLOAT, 32, (nil))