webgl refactoring