Turns out that if libgdx calls dispose() on you and you don't call
dispose() on one of your shaders, that shader will become weirdly broken
if the app re-launches. Fix it.