Well done. Satisfying, isn't it? Sorry my last post didn't make much sense. I should have looked at your code more carefully. I unweld my mesh and use a vertex normal rather than a face normal in the dot product calculation because that way you don't have to do the cross product stuff that you do to find the face normal. But you seem to have figured out what I meant.
Now get those lines back in and you'll be ready to get cracking on occlusion and depth-sorting. :)
Now get those lines back in and you'll be ready to get cracking on occlusion and depth-sorting. :)