generalized webgl setup