Tootle (Triangle Order Optimization Tool) is a 3D triangle mesh optimization tool that improves on existing mesh preprocessing techniques. By using Tootle, developers can optimize their models for pixel overdraw as well as vertex cache performance. This can provide significant performance improvements in pixel limited situations, with no penalty in vertex-limited scenarios, and no runtime cost.

Check out this blog post for the release announcement.

Key Features

  1. Vertex cache optimization: Triangles are re-ordered to optimize for the post-transform vertex cache in modern GPUs. This will yield significant performance improvements in vertex-tranform limited scenes.
  2. Overdraw optimization: To reduce the pixel cost of rendering a mesh, the Tootle library further re-orders the triangles in the mesh to reduce pixel overdraw. Significant reductions in pixel overdraw (2x or higher) can be achieved. This can yield significant performance improvements in pixel-limited scenes, and incurs no penalty in vertex-limited scenarios.
  3. Vertex prefetch cache optimization: Triangle indices are re-indexed in the order of their occurrence in the triangle list. The vertex buffer is re-ordered to match these new indices. Thus, vertices are accessed close to each other in memory. This optimization exploits the input vertex cache because vertices are typically fetched in a cacheline (that may contains more than one vertex data).

Tootle supports Microsoft Windows® and Linux® platform.


The following links provide the Tootle papers and presentations.

  1. Sander, P.V., Nehab, D., Barczak, J., 2007. Fast Triangle Reordering for Vertex Locality and Reduced Overdraw. ACM Transactions of Graphics (Proc. SIGGRAPH), 26(3), August 2007 [paper] [presentation].
  2. Nehab, D., Barczak, J., Sander, P.V., 2006. Triangle Order Optimization for graphics hardware computation culling. In Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games, pages 207-211 [paper] [presentation].

For source code, examples, build instructions, and more information, please go to the project page on GitHub.