A simple software renderer I made from scratch. (Except to get a drawable surface and input events, for which SDL is used. Everything else, including maths code, is hand-written.)
Features:
Vertex arrays
Z-buffer
Correct triangle clipping
Shader system with perspective-correct interpolation