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