[TIPS] Mipmap Levels Debugging with a DDS Debug Texture

DDS debug texture
DDS debug texture (available in the GeeXLab demo)

DDS debugging in GeeXLab
Mipmapping debugging in GeeXLab

A mipmap is a collection of images with different resolutions. A mipmap is arranged in a chain where each image is half the size of the previous one. Each resolution is a level of detail or LOD. The first level (LOD 0) is the biggest image while the last level is the smallest image.

Mipmapping is a widely used technique in 3D programming and game development. Almost all games use mipmaping. When the camera is near a textured object, the level 0 of the mipmap is used. And when the camera moves away from the object, a smaller resolution is used (smaller resolution = higher level).

Debugging a mipmap chain can be made easier with the use of a debug DDS texture. This DDS texture (provided in the GeeXLab demo below) is made of 7 mipmap levels: level 0: red, level 1: green, level 2: blue, level 3: yellow, level 4: pink, level 5: black and level 6: white.

The simple GeeXLab demo I coded for this article uses a GLSL shader to render a textured plane.

The GLSL shader is very simple:

void main(void)
  gl_Position = ftransform();
  gl_TexCoord[0] = gl_MultiTexCoord0;
uniform sampler2D colorMap;
uniform float lod;
void main (void)
  vec4 base = texture2DLod(colorMap, gl_TexCoord[0].st, lod);
  //vec4 base = texture2D(colorMap, gl_TexCoord[0].st);
  gl_FragColor = base;	

The texture2DLod GLSL function makes it possible to fetch the texels of a particular mipmap level. You can select the level (lod) with the tweak bar:

DDS debugging in GeeXLab
Mipmap level 0

DDS debugging in GeeXLab
Mipmap level 1

DDS debugging in GeeXLab
Mipmap level 3

And when you replace texture2DLod by texture2D in the fragment shader, you can see how OpenGL does the transition between two levels when you move the camera away the plane:

DDS debugging in GeeXLab

DDS debugging in GeeXLab

DDS debugging in GeeXLab

And depending on the point of view, you can see all mipmap levels in the same time:

DDS debugging in GeeXLab

You can download the GeeXLab demo here

You need the latest version of GeeXLab to play with the demo. You can download GeeXLab HERE.

Just drop the mipmap_debug.xml into GeeXLab and you’re ready.

For this demo, I used Lua as scripting language so if you don’t have Python or don’t want to install it, just download the version of GeeXLab without Python.

Some links about mipmapping:

One comment