added water rendering using shader and some refactoring