webgl fragment shader framework