40MTri/s for my last Catmull-Rom code

Today I switched from an old OpenGL 1.1 arrays model to the ARB_vertex_buffer_object extension, giving a 50% performance boost to my rendering pipeline :-)

  • Patch tesselation: edges are subdivided by 200, giving 200x200x2 = 80000 triangles for each patch.
  • FPS: 250/s at 1024x768@32bit, on a 1800MHz Barton.
  • Drawn patches: 2
  • MTri/s: 2x80000x250/1000000 = 40MTri/s! Quite decent.

The design has got ugly and I still have to refactor everything, but it look promising. For now, I use a T2F_V3F interleaved array. The texture is applied on the patch but it will likely be used as a shader lookup in the future.


  • Test whether interleaved arrays is the way to go or I should switch back to separate vertex/texcoord arrays.
  • Move the Catmull-Rom code to a vertex shader.
  • Generate normals on the fly in shader code.
  • Add a border stripe for avoiding boundary artifacts when doing C-LOD.
  • Manage patches with quadtree, so it's scalable and well suited for heightmap rendering.
  • Display models with patches.

Catmull-Rom Subdivision Surfaces

CRSS are bicubic surfaces like Bezier patches. Here is a visual explanation about the differences between Bézier surfaces, B-Splines and CRSS:

Powered by Blogger.