Span buffer
A software renderer's way of solving visibility one scanline at a time: each polygon is cut into horizontal runs, and only the runs that are actually visible get drawn.
Instead of testing depth at every pixel like a Z-buffer, the renderer keeps a sorted list of spans per row. Each new polygon has its spans clipped against those already there, and anything hidden is thrown away before a single texel is fetched. Every pixel is drawn exactly once, which on a 1996 Pentium was the difference between playable and a slideshow.
Quake built its world this way: an edge list sorted into spans per scanline, with the BSP tree and PVS as coarse filters beforehand. Michael Abrash has described how he and John Carmack tried and discarded several approaches before settling on it. Moving entities were still drawn with a Z-buffer on top, since spans for small, constantly moving objects cost more than they saved. Once 3D cards arrived, the technique vanished almost overnight.