I'm not skilled in opengl, but you seem to be drawing the same geometry for every rain drop. This crashes it at higher counts. I believe this is normally done by drawing lower poly instances at larger distances.
Okay I need to think about that in future project.
I think that major cause of low fps at higher drop count is that I use std::list to store rain drops and I loop through those drops in collision and rendering code in every frame. (lists suck at for loops)