refactored into flexible vertex attribute system