basic webgl implementation (client-side ONLY)