Quickly patched the issue about shadow not showing up properly. It seems to be my logical error (of setting GL states during mesh.draw(), maybe should be factored out to ShaderLib.cpp instead)

Shadow should be drawn properly this time.