// Mojo HTML5 GL v1.35 | (c) 2012, 2013 Arthur 'devolonter' Bikmullin | https://github.com/devolonter/mojo-html5-gl/blob/master/LICENSE.md var mojoHtml5Gl=function(g){document.addEventListener("DOMContentLoaded",function(){f("GameCanvas")},false);var d=function d(h){this.api=g;this.canvas=h;this.gl=g;this.width=h.width;this.height=h.height;this.simpleShader=g;this.textureShader=g;this.maxTextureSize=g;h.gl2d=this;var j=this.gl=h.getContext("webgl",{alpha:false})||h.getContext("experimental-webgl",{alpha:false});if(j===g||j===null){return}try{this.simpleShader=this.loadShaders(false);this.textureShader=this.loadShaders(true)}catch(i){throw i}this.api=new a(this);h.getContext=this.api;h.getContext=(function(k,l){return function(m){if(m==="webgl"||m==="experimental-webgl"){return l}return k}}(this.api,this.gl))};d.prototype.getFragmentShaderSource=function e(h){var i=[];i.push("precision mediump float;","varying vec4 vColor;");if(h){i.push("varying vec2 vTextureCoord;","uniform sampler2D uSampler;")}i.push("void main(void) {");if(h){i.push("gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;")}else{i.push("gl_FragColor = vColor;")}i.push("}");return i.join("\n")};d.prototype.getVertexShaderSource=function c(k){var j=2/this.canvas.width,l=-2/this.canvas.height;var i=[];i.push("attribute vec4 aVertexPosition;","attribute vec4 aVertexColor;","varying vec4 vColor;","const mat4 pMatrix = mat4("+j+",0,0,0, 0,"+l+",0,0, 0,0,1.0,1.0, -1.0,1.0,0,0);");if(k){i.push("varying vec2 vTextureCoord;")}i.push("void main(void) {","vec3 position = vec3(aVertexPosition.x, aVertexPosition.y, 1.0);","gl_Position = pMatrix * vec4(position, 1.0);","vColor = aVertexColor;");if(k){i.push("vTextureCoord = aVertexPosition.zw;")}i.push("}");return i.join("\n")};d.prototype.loadShaders=function b(i){var j=this.gl;var h=j.createShader(j.FRAGMENT_SHADER);j.shaderSource(h,this.getFragmentShaderSource(i));j.compileShader(h);if(!j.getShaderParameter(h,j.COMPILE_STATUS)){throw"fragment shader error: "+j.getShaderInfoLog(h)}var l=j.createShader(j.VERTEX_SHADER);j.shaderSource(l,this.getVertexShaderSource(i));j.compileShader(l);if(!j.getShaderParameter(l,j.COMPILE_STATUS)){throw"vertex shader error: "+j.getShaderInfoLog(l)}var k=this.shaderProgram=j.createProgram();j.attachShader(k,h);j.attachShader(k,l);j.linkProgram(k);if(!j.getProgramParameter(k,j.LINK_STATUS)){throw"Could not initialise shaders."}k.vertexPositionAttribute=j.getAttribLocation(k,"aVertexPosition");j.enableVertexAttribArray(k.vertexPositionAttribute);k.vertexColorAttribute=j.getAttribLocation(k,"aVertexColor");j.enableVertexAttribArray(k.vertexColorAttribute);k.uColor=j.getUniformLocation(k,"uColor");k.uSampler=j.getUniformLocation(k,"uSampler");return k};var a=function a(F){if(CFG_CONFIG==="debug"){print("WebGL enabled")}var A=F.gl;F.width=-1;F.height=-1;F.maxTextureSize=A.getParameter(A.MAX_TEXTURE_SIZE);if(!m(F.maxTextureSize)){F.maxTextureSize+=1}var q=2048;var H=(q/2)|0;var o=1,r=1,h=1;var l=1,y=0;var B=0,p=1;var u=B;var C=null;var w=F.simpleShader;var s=F.textureShader;var x={vdata:new Float32Array(q*4),cdata:new Float32Array(q*4),vcount:0,vpointer:0,cpointer:0,vbuffer:A.createBuffer(),cbuffer:A.createBuffer()};var G={last:new j(-1,0,null),next:0};var k=new Array(H);for(var z=0;zq){S=q}else{if(S<12){S=12}else{S&=~3}}P+=O;N+=W;D(A.TRIANGLE_FAN,S);var T=x.vpointer;for(var X=0;Xq*2){return}D(A.TRIANGLE_FAN,K.length/2);var J=x.vpointer;if(this.tformed){for(var I=0;Iq){return}D(A.TRIANGLE_FAN,I);var K=x.vpointer;for(var O=0;O=0;--Q){var L=M+Q*I;for(var S=0;S>16)&255;I[R+1]=(O>>8)&255;I[R+2]=O&255;I[R+3]=(O>>24)&255;R+=4}P+=K-L}M.gc.putImageData(J,U,S);A.deleteTexture(M.image.texture);M.image.texture=null;n(M.image)};function D(J,K){if(x.vcount+K>q||G.next===H){t()}G.last=k[G.next];G.next+=1;G.last.type=J;G.last.count=K;G.last.texture=null;x.vpointer=x.vcount*4;x.cpointer=x.vcount*4;x.vcount+=K;var L=x.cpointer;for(var I=0;IF.maxTextureSize||J.height>F.maxTextureSize){var I=document.createElement("canvas");I.width=(J.width>F.maxTextureSize)?F.maxTextureSize:J.width;I.height=(J.height>F.maxTextureSize)?F.maxTextureSize:J.height;var i=I.getContext("2d");i.drawImage(J,0,0,J.width,J.height,0,0,I.width,I.height);J=I}A.bindTexture(A.TEXTURE_2D,J.texture);A.texImage2D(A.TEXTURE_2D,0,A.RGBA,A.RGBA,A.UNSIGNED_BYTE,J);A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_S,A.CLAMP_TO_EDGE);A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_T,A.CLAMP_TO_EDGE);if(K){A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MAG_FILTER,A.LINEAR)}else{A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MAG_FILTER,A.NEAREST)}if(m(J.width)&&m(J.height)){if(K){A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,A.LINEAR_MIPMAP_LINEAR);A.generateMipmap(A.TEXTURE_2D)}else{A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,A.NEAREST_MIPMAP_NEAREST);A.generateMipmap(A.TEXTURE_2D)}}else{if(K){A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,A.LINEAR)}else{A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,A.NEAREST)}}}function m(i){return i>0&&((i-1)&i)===0}function j(i,J,I){this.type=i;this.count=J;this.texture=I}};function f(i){if(window.WebGLRenderingContext!==g){try{new d(document.getElementById(i))}catch(h){}}}};mojoHtml5Gl();