Really messy but shaders sort of work