(function(){function g(a){var b=false;if(typeof window.ActiveXObject!="undefined")try{var c=new ActiveXObject("ChromeTab.ChromeFrame");if(c){try{var e=document.createElement("canvas");var f=e.getContext("webgl")||e.getContext("experimental-webgl");b=typeof f!=="undefined"&&f!==null}catch(g){}}}catch(g){}if(navigator.userAgent.indexOf("MSIE")<0||b){if(!b&&navigator.userAgent.indexOf("Opera")>=0)try{new d(document.createElement("canvas"))}catch(g){return}new d(document.getElementById(a))}else{var h=document.createElement("object");h.onreadystatechange=function(){var b=document.getElementById(a);var c=document.createElement("object");c.onreadystatechange=function(){new d(c)};b.parentNode.replaceChild(c,b);c.id=a;c.width=b.width;c.height=b.height;c.type="application/x-webgl"};h.type="application/x-webgl"}}document.addEventListener("DOMContentLoaded",function(){g("GameCanvas")},false);var a=3.141592653589793;var b=2*a;var c=a/2;var d=this.WebGL2D=function(b){this.canvas=b;this.gl=undefined;this.fs=undefined;this.vs=undefined;this.shaderProgram=undefined;this.shaderPool=[];this.maxTextureSize=undefined;this.width;this.height;b.gl2d=this;var c=this.gl=b.getContext("webgl",{alpha:false})||b.getContext("experimental-webgl",{alpha:false});if(typeof c==="undefined"||c===null)return;try{this.initShaders()}catch(d){throw d}b.getContext=function(a){return function(b){return new f(a)}}(this)};var e={texture:1,crop:2};d.prototype.getFragmentShaderSource=function(b){var c=[];c.push("precision mediump float;","varying vec4 vColor;");if(b&e.texture){c.push("varying vec2 vTextureCoord;","uniform sampler2D uSampler;");if(b&e.crop){c.push("uniform vec4 uCropSource;")}}c.push("void main(void) {");if(b&e.texture){if(b&e.crop){c.push("gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x * uCropSource.z, vTextureCoord.y * uCropSource.w) + uCropSource.xy) * vColor;")}else{c.push("gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;")}}else{c.push("gl_FragColor = vColor;")}c.push("}");return c.join("\n")};d.prototype.getVertexShaderSource=function(b){var c=2/this.canvas.width,d=-2/this.canvas.height;var f=[];f.push("attribute vec4 aVertexPosition;","uniform vec4 uColor;","varying vec4 vColor;","const mat4 pMatrix = mat4("+c+",0,0,0, 0,"+d+",0,0, 0,0,1.0,1.0, -1.0,1.0,0,0);");if(b&e.texture){f.push("varying vec2 vTextureCoord;")}f.push("void main(void) {","vec3 position = vec3(aVertexPosition.x, aVertexPosition.y, 1.0);","gl_Position = pMatrix * vec4(position, 1.0);","vColor = uColor;");if(b&e.texture){f.push("vTextureCoord = aVertexPosition.zw;")}f.push("}");return f.join("\n")};d.prototype.initShaders=function(b){var c=this.gl;b=b||0;var d=this.shaderPool;if(!d){d=this.shaderPool=[]}d=d[b];if(d){c.useProgram(d);this.shaderProgram=d;return d}else{var e=this.fs=c.createShader(c.FRAGMENT_SHADER);c.shaderSource(this.fs,this.getFragmentShaderSource(b));c.compileShader(this.fs);if(!c.getShaderParameter(this.fs,c.COMPILE_STATUS)){throw"fragment shader error: "+c.getShaderInfoLog(this.fs)}var f=this.vs=c.createShader(c.VERTEX_SHADER);c.shaderSource(this.vs,this.getVertexShaderSource(b));c.compileShader(this.vs);if(!c.getShaderParameter(this.vs,c.COMPILE_STATUS)){throw"vertex shader error: "+c.getShaderInfoLog(this.vs)}var g=this.shaderProgram=c.createProgram();c.attachShader(g,e);c.attachShader(g,f);c.linkProgram(g);if(!c.getProgramParameter(g,c.LINK_STATUS)){throw"Could not initialise shaders."}c.useProgram(g);g.vertexPositionAttribute=c.getAttribLocation(g,"aVertexPosition");c.enableVertexAttribArray(g.vertexPositionAttribute);g.uColor=c.getUniformLocation(g,"uColor");g.uSampler=c.getUniformLocation(g,"uSampler");g.uCropSource=c.getUniformLocation(g,"uCropSource");this.shaderPool[b]=g;return g}};var f=this.WebGL2DAPI=function(b){function w(a,b){if(s.vcount+b>d||t.next===f){x()}t.last=u[t.next];t.next+=1;t.last.type=a;t.last.count=b;t.last.texture=null;s.vpointer=s.vcount*4;s.vcount+=b}function x(){if(s.vcount===0)return;var a=b.shaderProgram;var d=null;var f=0;var k;c.bufferData(c.ARRAY_BUFFER,s.vdata,c.DYNAMIC_DRAW);switch(o){case l:a=b.initShaders(0);c.vertexAttribPointer(a.vertexPositionAttribute,4,c.FLOAT,false,0,0);c.uniform4f(a.uColor,g/255,h/255,i/255,j);for(var p=0;pb.maxTextureSize||a.height>b.maxTextureSize){var e=document.createElement("canvas");e.width=a.width>b.maxTextureSize?b.maxTextureSize:a.width;e.height=a.height>b.maxTextureSize?b.maxTextureSize:a.height;var f=e.getContext("2d");f.drawImage(a,0,0,a.width,a.height,0,0,e.width,e.height);a=e}c.bindTexture(c.TEXTURE_2D,this.obj);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);if(d){c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR)}else{c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST)}if(B(a.width)&&B(a.height)){if(d){c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR_MIPMAP_LINEAR);c.generateMipmap(c.TEXTURE_2D)}else{c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST_MIPMAP_NEAREST);c.generateMipmap(c.TEXTURE_2D)}}else{if(d){c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR)}else{c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST)}}}function B(a){return a>0&&(a-1&a)===0}var c=b.gl;b.width=-1;b.height=-1;b.maxTextureSize=c.getParameter(c.MAX_TEXTURE_SIZE);if(!B(b.maxTextureSize))b.maxTextureSize+=1;var d=parseInt(65536/20);var f=parseInt(d/2);var g=1,h=1,i=1;var j=1,k=0;var l=0,m=1,n=2;var o=l;var p;var q=[],r=[];var s={vdata:new Float32Array(new Array(d*4)),vcount:0,vpointer:0,pointer:c.createBuffer()};var t={last:{type:-1,count:0},next:0};var u=new Array(f);for(var v=0;vd){i=d}else if(i<12){i=12}else{i&=~3}a+=g;b+=h;w(c.TRIANGLE_FAN,i);for(var r=0;rd*2)return;w(c.TRIANGLE_FAN,a.length/2);if(this.tformed){for(var b=0;b