From 2092acf520e3f346f15e42c76c2f616e7d094c97 Mon Sep 17 00:00:00 2001
From: Jonathan Duran
Date: Thu, 9 Feb 2012 12:10:37 -0800
Subject: Squashed commit of the following:

commit ce81a3f4387d80f9ac406e73b843fb5dbe9cf432
Merge: e78f431 fba39db
Author: Valerio Virgillito <valerio@motorola.com>
Date:   Thu Feb 9 11:57:35 2012 -0800

    Merge pull request #26 from pushkarjoshi/pentool

    Pentool

commit e78f4312c194d9e8188075cf1fe87e4be22b24e4
Author: Valerio Virgillito <valerio@motorola.com>
Date:   Thu Feb 9 11:56:40 2012 -0800

    adding oneway to the 3d bindings to fix a bug where the stage was getting selected.

    Signed-off-by: Valerio Virgillito <valerio@motorola.com>

commit fba39dbb3bd64eddf6162fbf57232089e446fb06
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Thu Feb 9 10:50:05 2012 -0800

    removing shaders

commit fa700027b541ec8f37c55f4fe17da5f78759ebd5
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 8 16:06:37 2012 -0800

    fill all paths even if they are open

commit 18243deb66ab14a014756bfb0be1a52648c7771a
Merge: 802e92e 0537f8f
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 8 15:42:40 2012 -0800

    Merge branch 'master' into pentool

    Conflicts:
    	js/helper-classes/RDGE/GLWorld.js
    	js/helper-classes/RDGE/MaterialsLibrary.js

commit 802e92eb70b00849dadacf2c6590d27edbe65d99
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 8 15:39:47 2012 -0800

    bug fixes for better anchor point rotation and removing snapping on hover and mouse down

commit 9b6b228524f14bf65ba60aaf3d0993c8ec5bff2d
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Tue Feb 7 15:22:11 2012 -0800

    some minor bug fixes and code cleanup

commit 4bbe42e6d01fd0f81d13357a75b40eae9925dda3
Merge: e7aa17a 8950b34
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Tue Feb 7 07:21:27 2012 -0800

    Merge branch 'master' into pentool

commit e7aa17a9b472640355e95c54841399f6203050d4
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Tue Feb 7 07:20:28 2012 -0800

    don't use colorToHex function because it only works for 3D color (needs a fix to colorToHex)

commit acc500d1f1c76f4e7c93ae1cfea8d925ca95e7b9
Merge: 4d4de64 4222db9
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Thu Feb 2 11:28:45 2012 -0800

    Merge branch 'working' of c:/Code/github/emueller/ninja-internal/ into pentool

commit 4d4de64472603426a73b26cc98ba8206190949b8
Merge: 0e87c02 5233508
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Thu Feb 2 11:19:30 2012 -0800

    Merge branch 'master' into pentool

commit 4222db97e353fb65fab787ba5927d16d9fa4e1f7
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 16:18:26 2012 -0800

    Removed a console log and set the Plasma material to animating.

commit 30bc466a0ac80f8303e223c19704b90457293cdc
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 15:57:20 2012 -0800

    Fixed plane orientations for view orientations other than front.

commit 11db5a63bda57c630eaf1d8baded9b79ca7ac1f2
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 15:11:21 2012 -0800

    listen for the appMouseUp event in the Pan tool

commit 823945a2bcb42bbf9c6a1cd0ef723b8f415e557f
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 14:39:46 2012 -0800

    factor in the zoom factor when drawing the stage compass.

commit 0e87c02e74e08c7bf156373b0d2459563e17ecd6
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 1 14:38:15 2012 -0800

    make GLAnchorPoint functions as part of its prototype

commit 5a288b9d3f8e6690149978d9d0e7bea98cc81312
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 14:09:24 2012 -0800

    Fix for a marquee zoom bug.

commit 715f95cacead0025a57823e4cefa22e618f15df0
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 14:00:06 2012 -0800

    mouse wheel for zoom tool

commit 62d38a080b2918a0284c854e9bf882bfeeea1e0b
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 1 13:21:11 2012 -0800

    avoid overriding GlGeomObj translate method

commit 799369e153baf92eb10f26e91a1ab664900da8ed
Merge: b2ce8b8 c0f4374
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 13:06:17 2012 -0800

    Merge branch 'ToolFixes' of github.com:mqg734/ninja-internal into working

commit b2ce8b819cc85a558d862c04965b7e65a6ce8640
Author: hwc487 <hwc487@motorola.com>
Date:   Wed Feb 1 13:05:32 2012 -0800

    changes to allow minimal rendering ofnon-animated materials.

commit ada488781ff815a827e7f5903f2c55773e3be0f3
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 1 12:16:11 2012 -0800

    when selecting anchor points, first check if the selected anchor position is close enough

commit 107f79288ed87a282dd52075640297cc02bdf318
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Wed Feb 1 12:00:44 2012 -0800

    performance improvement: add most of the GLSubpath functions to its prototype

commit c00d5d3072e487be200559f692ce4399222d5fa5
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Tue Jan 31 14:25:05 2012 -0800

    handle the case of proper redraw when the alt key is held down even after mouse up

commit c006b3e75d5e23da63687a04cd30bf56a3a8a80d
Merge: f0e3fa6 1d8af9f
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Tue Jan 31 12:07:43 2012 -0800

    Merge branch 'master' into pentool

commit f0e3fa691b3c042c9fc49a7a0cde8ddf8100c195
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Tue Jan 31 12:05:15 2012 -0800

    display the anchor point to be selected on mouse hover

commit aa1b4b78d9e1b9cc15529dbf7196b7ac8a88e260
Merge: 0b8d8b2 6066b9b
Author: hwc487 <hwc487@motorola.com>
Date:   Tue Jan 31 10:46:48 2012 -0800

    Merge branch 'ToolFixes' of github.com:mqg734/ninja-internal into working

    Conflicts:
    	js/stage/stage.reel/stage.js

commit 0b8d8b2eb595b64ef53440b949f3c5ec891daf8a
Merge: 8e43a46 e4837ed
Author: hwc487 <hwc487@motorola.com>
Date:   Tue Jan 31 09:22:56 2012 -0800

    Merge branch 'master' of github.com:Motorola-Mobility/ninja-internal into working

commit 8e43a46e3d79323fe06dc7771bc611a2c3c85c5c
Author: hwc487 <hwc487@motorola.com>
Date:   Mon Jan 30 16:15:12 2012 -0800

    Renderer startup handling of non-animated materials.

    Changed zoom from the document bar to keep the location center of the viewable portion of the document fixed.

commit c41d2c2b749b67921f243fb7594ce0cdb1ccce36
Merge: 86a801c f129a23
Author: hwc487 <hwc487@motorola.com>
Date:   Mon Jan 30 16:09:00 2012 -0800

    Merge branch 'staging' of github.com:Motorola-Mobility/ninja-internal into working

commit 972e0ce4df7b332601ad006ca8b7dd9e189a59ef
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Mon Jan 30 14:38:48 2012 -0800

    do the fill before the stroke for the path, so the stroke width renders acc. to user specification

commit da7ad067b146200847b543faf288844221dff928
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Mon Jan 30 14:30:31 2012 -0800

    missed a couple of pen tool property files on last checkin

commit 76abbaafb0d90bb1dc9c63a5a5a78ab95bb00420
Author: Pushkar Joshi <pushkar@motorola.com>
Date:   Mon Jan 30 13:56:33 2012 -0800

    Merge pushkar branch on gerritt with github version

commit 86a801c057fc3b0580d6130be5740c2ee503444f
Author: hwc487 <hwc487@motorola.com>
Date:   Fri Jan 27 15:52:36 2012 -0800

    updated from old repo

Signed-off-by: Jonathan Duran <jduran@motorola.com>
---
 js/helper-classes/RDGE/rdge-compiled.js | 102 ++++++++++++++++----------------
 1 file changed, 51 insertions(+), 51 deletions(-)

(limited to 'js/helper-classes/RDGE/rdge-compiled.js')

diff --git a/js/helper-classes/RDGE/rdge-compiled.js b/js/helper-classes/RDGE/rdge-compiled.js
index 4b74aa17..e55516db 100644
--- a/js/helper-classes/RDGE/rdge-compiled.js
+++ b/js/helper-classes/RDGE/rdge-compiled.js
@@ -19,14 +19,14 @@ vec4.equal=function(a,b,f){f||(f=0.0010);return vec4.distanceSq(a,b)<f*f};vec4.l
 mat4={string:function(a){var b="{ ";b+=a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", ";b+=a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", ";b+=a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", ";b+=a[12]+", "+a[13]+", "+a[14]+", "+a[15]+" }";return b},toCSSString:function(a,b){var f=10;b&&(f=b);var g="matrix3d(";g+=a[0].toFixed(10)+", "+a[1].toFixed(10)+", "+a[2].toFixed(10)+", "+a[3].toFixed(10)+", ";g+=a[4].toFixed(10)+", "+a[5].toFixed(10)+", "+a[6].toFixed(10)+", "+a[7].toFixed(10)+", ";g+=a[8].toFixed(10)+", "+a[9].toFixed(10)+
 ", "+a[10].toFixed(10)+", "+a[11].toFixed(10)+", ";g+=a[12].toFixed(10)*f+", "+(600-a[13].toFixed(10)*f)+", "+a[14].toFixed(10)*f+", "+a[15].toFixed(10)+")";return g},verify:function(a){if(a==void 0||a.length==void 0||a.length<16)return!1;for(var b=16;b--;)if(typeof a[b]!="number")return!1;return!0},copy:function(a){return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]},inplace_copy:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];a[6]=
 b[6];a[7]=b[7];a[8]=b[8];a[9]=b[9];a[10]=b[10];a[11]=b[11];a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15]},identity:function(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},zero:function(){return[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},basis:function(a,b,f,g){return g==null||g==void 0?[a[0],a[1],a[2],0,b[0],b[1],b[2],0,f[0],f[1],f[2],0,0,0,0,1]:[a[0],a[1],a[2],a.length==4?a[3]:0,b[0],b[1],b[2],b.length==4?b[3]:0,f[0],f[1],f[2],f.length==4?f[3]:0,g[0],g[1],g[2],g.length==4?g[3]:1]},angleAxis:function(a,b){a*=
-Math.PI/180;a/=2;var f=Math.sin(a),g=Math.cos(a),h=f*f;vec3.normalize(b);vec3.lengthSq(b)<=0&&(b=[0,0,0,1]);var l=mat4.identity();if(b[0]==1&&b[1]==0&&b[2]==0)l[5]=1-2*h,l[6]=2*f*g,l[9]=-2*f*g,l[10]=1-2*h;else if(b[0]==0&&b[1]==1&&b[2]==0)l[0]=1-2*h,l[2]=-2*f*g,l[8]=2*f*g,l[10]=1-2*h;else if(b[0]==0&&b[1]==0&&b[2]==1)l[0]=1-2*h,l[1]=2*f*g,l[4]=-2*f*g,l[5]=1-2*h;else{var n=b[0],o=b[1],q=b[2],p=n*n,r=o*o,s=q*q;l[0]=1-2*(r+s)*h;l[1]=2*(n*o*h+q*f*g);l[2]=2*(n*q*h-o*f*g);l[4]=2*(o*n*h-q*f*g);l[5]=1-2*
-(s+p)*h;l[6]=2*(o*q*h+n*f*g);l[8]=2*(q*n*h+o*f*g);l[9]=2*(q*o*h-n*f*g);l[10]=1-2*(p+r)*h}return l}};mat4.lookAt=function(a,b,f){b=vec3.normalize(vec3.sub(a,b));vec3.length(b)<1.0E-4&&(b=[0,0,1]);var f=vec3.normalize(vec3.cross(f,b)),g=vec3.normalize(vec3.cross(b,f)),h=mat4.identity();mat4.setRow(h,0,f);mat4.setRow(h,1,g);mat4.setRow(h,2,b);mat4.setRow(h,3,a);return h};
-mat4.frustum=function(a,b,f,g,h,l){var n=b-a,o=g-f,q=l-h,p=2*h,r=mat4.zero();r[0]=p/n;r[5]=p/o;r[8]=(b+a)/n;r[9]=(g+f)/o;r[10]=-(l+h)/q;r[11]=-1;r[14]=-(p*l)/q;return r};mat4.perspective=function(a,b,f,g){var a=Math.tan(a*Math.PI/360)*f,h=-a;return mat4.frustum(b*h,b*a,h,a,f,g)};mat4.orthographic=function(a,b,f,g,h,l){var n=(a+b)/(a-b),o=(f+g)/(f-g),q=(l+h)/(l-h),p=mat4.zero();p[0]=2/(a-b);p[5]=2/(f-g);p[10]=-2/(l-h);p[12]=n;p[13]=o;p[14]=q;p[15]=1;return p};
-mat4.mul=function(a,b){var f=a[0],g=a[1],h=a[2],l=a[3],n=a[4],o=a[5],q=a[6],p=a[7],r=a[8],s=a[9],u=a[10],v=a[11],x=a[12],w=a[13],y=a[14],z=a[15],A=b[0],C=b[1],D=b[2],B=b[3],E=b[4],F=b[5],G=b[6],H=b[7],I=b[8],J=b[9],K=b[10],L=b[11],M=b[12],N=b[13],O=b[14],P=b[15];return[f*A+g*E+h*I+l*M,f*C+g*F+h*J+l*N,f*D+g*G+h*K+l*O,f*B+g*H+h*L+l*P,n*A+o*E+q*I+p*M,n*C+o*F+q*J+p*N,n*D+o*G+q*K+p*O,n*B+o*H+q*L+p*P,r*A+s*E+u*I+v*M,r*C+s*F+u*J+v*N,r*D+s*G+u*K+v*O,r*B+s*H+u*L+v*P,x*A+w*E+y*I+z*M,x*C+w*F+y*J+z*N,x*D+w*G+
-y*K+z*O,x*B+w*H+y*L+z*P]};mat4.mul4x3=function(a,b){var f=a[0],g=a[1],h=a[2],l=a[4],n=a[5],o=a[6],q=a[8],p=a[9],r=a[10],s=a[12],u=a[13],v=a[14],x=b[0],w=b[1],y=b[2],z=b[4],A=b[5],C=b[6],D=b[8],B=b[9],E=b[10];return[f*x+g*z+h*D,f*w+g*A+h*B,f*y+g*C+h*E,0,l*x+n*z+o*D,l*w+n*A+o*B,l*y+n*C+o*E,0,q*x+p*z+r*D,q*w+p*A+r*B,q*y+p*C+r*E,0,s*x+u*z+v*D+b[12],s*w+u*A+v*B+b[13],s*y+u*C+v*E+b[14],1]};mat4._det2x2=function(a,b,f,g){return a*g-b*f};
-mat4._det3x3=function(a,b,f,g,h,l,n,o,q){return a*mat4._det2x2(h,l,o,q)-g*mat4._det2x2(b,f,o,q)+n*mat4._det2x2(b,f,h,l)};mat4._det4x4=function(a){var b=a[1],f=a[2],g=a[3],h=a[4],l=a[5],n=a[6],o=a[7],q=a[8],p=a[9],r=a[10],s=a[11],u=a[12],v=a[13],x=a[14],w=a[15];return a[0]*mat4._det3x3(l,p,v,n,r,x,o,s,w)-b*mat4._det3x3(h,q,u,n,r,x,o,s,w)+f*mat4._det3x3(h,q,u,l,p,v,o,s,w)-g*mat4._det3x3(h,q,u,l,p,v,n,r,x)};
-mat4._adjoint=function(a){var b=a[0],f=a[1],g=a[2],h=a[3],l=a[4],n=a[5],o=a[6],q=a[7],p=a[8],r=a[9],s=a[10],u=a[11],v=a[12],x=a[13],w=a[14],a=a[15];return[mat4._det3x3(n,r,x,o,s,w,q,u,a),-mat4._det3x3(f,r,x,g,s,w,h,u,a),mat4._det3x3(f,n,x,g,o,w,h,q,a),-mat4._det3x3(f,n,r,g,o,s,h,q,u),-mat4._det3x3(l,p,v,o,s,w,q,u,a),mat4._det3x3(b,p,v,g,s,w,h,u,a),-mat4._det3x3(b,l,v,g,o,w,h,q,a),mat4._det3x3(b,l,p,g,o,s,h,q,u),mat4._det3x3(l,p,v,n,r,x,q,u,a),-mat4._det3x3(b,p,v,f,r,x,h,u,a),mat4._det3x3(b,l,v,f,
-n,x,h,q,a),-mat4._det3x3(b,l,p,f,n,r,h,q,u),-mat4._det3x3(l,p,v,n,r,x,o,s,w),mat4._det3x3(b,p,v,f,r,x,g,s,w),-mat4._det3x3(b,l,v,f,n,x,g,o,w),mat4._det3x3(b,l,p,f,n,r,g,o,s)]};mat4.inverse=function(a){var b=mat4._det4x4(a);if(Math.abs(b)<1.0E-8)return null;a=mat4._adjoint(a);b=1/b;return[a[0]*b,a[1]*b,a[2]*b,a[3]*b,a[4]*b,a[5]*b,a[6]*b,a[7]*b,a[8]*b,a[9]*b,a[10]*b,a[11]*b,a[12]*b,a[13]*b,a[14]*b,a[15]*b]};
+Math.PI/180;a/=2;var f=Math.sin(a),g=Math.cos(a),h=f*f;vec3.normalize(b);vec3.lengthSq(b)<=0&&(b=[0,0,0,1]);var l=mat4.identity();if(b[0]==1&&b[1]==0&&b[2]==0)l[5]=1-2*h,l[6]=2*f*g,l[9]=-2*f*g,l[10]=1-2*h;else if(b[0]==0&&b[1]==1&&b[2]==0)l[0]=1-2*h,l[2]=-2*f*g,l[8]=2*f*g,l[10]=1-2*h;else if(b[0]==0&&b[1]==0&&b[2]==1)l[0]=1-2*h,l[1]=2*f*g,l[4]=-2*f*g,l[5]=1-2*h;else{var n=b[0],o=b[1],p=b[2],q=n*n,r=o*o,s=p*p;l[0]=1-2*(r+s)*h;l[1]=2*(n*o*h+p*f*g);l[2]=2*(n*p*h-o*f*g);l[4]=2*(o*n*h-p*f*g);l[5]=1-2*
+(s+q)*h;l[6]=2*(o*p*h+n*f*g);l[8]=2*(p*n*h+o*f*g);l[9]=2*(p*o*h-n*f*g);l[10]=1-2*(q+r)*h}return l}};mat4.lookAt=function(a,b,f){b=vec3.normalize(vec3.sub(a,b));vec3.length(b)<1.0E-4&&(b=[0,0,1]);var f=vec3.normalize(vec3.cross(f,b)),g=vec3.normalize(vec3.cross(b,f)),h=mat4.identity();mat4.setRow(h,0,f);mat4.setRow(h,1,g);mat4.setRow(h,2,b);mat4.setRow(h,3,a);return h};
+mat4.frustum=function(a,b,f,g,h,l){var n=b-a,o=g-f,p=l-h,q=2*h,r=mat4.zero();r[0]=q/n;r[5]=q/o;r[8]=(b+a)/n;r[9]=(g+f)/o;r[10]=-(l+h)/p;r[11]=-1;r[14]=-(q*l)/p;return r};mat4.perspective=function(a,b,f,g){var a=Math.tan(a*Math.PI/360)*f,h=-a;return mat4.frustum(b*h,b*a,h,a,f,g)};mat4.orthographic=function(a,b,f,g,h,l){var n=(a+b)/(a-b),o=(f+g)/(f-g),p=(l+h)/(l-h),q=mat4.zero();q[0]=2/(a-b);q[5]=2/(f-g);q[10]=-2/(l-h);q[12]=n;q[13]=o;q[14]=p;q[15]=1;return q};
+mat4.mul=function(a,b){var f=a[0],g=a[1],h=a[2],l=a[3],n=a[4],o=a[5],p=a[6],q=a[7],r=a[8],s=a[9],u=a[10],v=a[11],x=a[12],w=a[13],y=a[14],z=a[15],A=b[0],C=b[1],D=b[2],B=b[3],E=b[4],F=b[5],G=b[6],H=b[7],I=b[8],J=b[9],K=b[10],L=b[11],M=b[12],N=b[13],O=b[14],P=b[15];return[f*A+g*E+h*I+l*M,f*C+g*F+h*J+l*N,f*D+g*G+h*K+l*O,f*B+g*H+h*L+l*P,n*A+o*E+p*I+q*M,n*C+o*F+p*J+q*N,n*D+o*G+p*K+q*O,n*B+o*H+p*L+q*P,r*A+s*E+u*I+v*M,r*C+s*F+u*J+v*N,r*D+s*G+u*K+v*O,r*B+s*H+u*L+v*P,x*A+w*E+y*I+z*M,x*C+w*F+y*J+z*N,x*D+w*G+
+y*K+z*O,x*B+w*H+y*L+z*P]};mat4.mul4x3=function(a,b){var f=a[0],g=a[1],h=a[2],l=a[4],n=a[5],o=a[6],p=a[8],q=a[9],r=a[10],s=a[12],u=a[13],v=a[14],x=b[0],w=b[1],y=b[2],z=b[4],A=b[5],C=b[6],D=b[8],B=b[9],E=b[10];return[f*x+g*z+h*D,f*w+g*A+h*B,f*y+g*C+h*E,0,l*x+n*z+o*D,l*w+n*A+o*B,l*y+n*C+o*E,0,p*x+q*z+r*D,p*w+q*A+r*B,p*y+q*C+r*E,0,s*x+u*z+v*D+b[12],s*w+u*A+v*B+b[13],s*y+u*C+v*E+b[14],1]};mat4._det2x2=function(a,b,f,g){return a*g-b*f};
+mat4._det3x3=function(a,b,f,g,h,l,n,o,p){return a*mat4._det2x2(h,l,o,p)-g*mat4._det2x2(b,f,o,p)+n*mat4._det2x2(b,f,h,l)};mat4._det4x4=function(a){var b=a[1],f=a[2],g=a[3],h=a[4],l=a[5],n=a[6],o=a[7],p=a[8],q=a[9],r=a[10],s=a[11],u=a[12],v=a[13],x=a[14],w=a[15];return a[0]*mat4._det3x3(l,q,v,n,r,x,o,s,w)-b*mat4._det3x3(h,p,u,n,r,x,o,s,w)+f*mat4._det3x3(h,p,u,l,q,v,o,s,w)-g*mat4._det3x3(h,p,u,l,q,v,n,r,x)};
+mat4._adjoint=function(a){var b=a[0],f=a[1],g=a[2],h=a[3],l=a[4],n=a[5],o=a[6],p=a[7],q=a[8],r=a[9],s=a[10],u=a[11],v=a[12],x=a[13],w=a[14],a=a[15];return[mat4._det3x3(n,r,x,o,s,w,p,u,a),-mat4._det3x3(f,r,x,g,s,w,h,u,a),mat4._det3x3(f,n,x,g,o,w,h,p,a),-mat4._det3x3(f,n,r,g,o,s,h,p,u),-mat4._det3x3(l,q,v,o,s,w,p,u,a),mat4._det3x3(b,q,v,g,s,w,h,u,a),-mat4._det3x3(b,l,v,g,o,w,h,p,a),mat4._det3x3(b,l,q,g,o,s,h,p,u),mat4._det3x3(l,q,v,n,r,x,p,u,a),-mat4._det3x3(b,q,v,f,r,x,h,u,a),mat4._det3x3(b,l,v,f,
+n,x,h,p,a),-mat4._det3x3(b,l,q,f,n,r,h,p,u),-mat4._det3x3(l,q,v,n,r,x,o,s,w),mat4._det3x3(b,q,v,f,r,x,g,s,w),-mat4._det3x3(b,l,v,f,n,x,g,o,w),mat4._det3x3(b,l,q,f,n,r,g,o,s)]};mat4.inverse=function(a){var b=mat4._det4x4(a);if(Math.abs(b)<1.0E-8)return null;a=mat4._adjoint(a);b=1/b;return[a[0]*b,a[1]*b,a[2]*b,a[3]*b,a[4]*b,a[5]*b,a[6]*b,a[7]*b,a[8]*b,a[9]*b,a[10]*b,a[11]*b,a[12]*b,a[13]*b,a[14]*b,a[15]*b]};
 mat4.rigidInverse=function(a){out=mat4.transpose3x3(a);out[12]=-vec3.dot([out[0],out[4],out[8]],[a[12],a[13],a[14]]);out[13]=-vec3.dot([out[1],out[5],out[9]],[a[12],a[13],a[14]]);out[14]=-vec3.dot([out[2],out[6],out[10]],[a[12],a[13],a[14]]);return out};mat4.transpose=function(a){return[a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]]};mat4.transpose3x3=function(a){return[a[0],a[4],a[8],a[3],a[1],a[5],a[9],a[7],a[2],a[6],a[10],a[11],a[12],a[13],a[14],a[15]]};
 mat4.transformPoint=function(a,b){var f=b[0],g=b[1],h=b[2],l=b.length>=4?b[3]:1;return[a[0]*f+a[4]*g+a[8]*h+a[12]*l,a[1]*f+a[5]*g+a[9]*h+a[13]*l,a[2]*f+a[6]*g+a[10]*h+a[14]*l,a[3]*f+a[7]*g+a[11]*h+a[15]*l]};mat4.transformVector=function(a,b){var a=mat4.inverse(a),f=b[0],g=b[1],h=b[2],l=b.length>=4?b[3]:0;return[a[0]*f+a[1]*g+a[2]*h+a[3]*l,a[4]*f+a[5]*g+a[6]*h+a[7]*l,a[8]*f+a[9]*g+a[10]*h+a[11]*l,a[12]*f+a[13]*g+a[14]*h+a[15]*l]};
 mat4.transformPoint4x3=function(a,b){var f=b[0],g=b[1],h=b[2];return[a[0]*f+a[4]*g+a[8]*h+a[12],a[1]*f+a[5]*g+a[9]*h+a[13],a[2]*f+a[6]*g+a[10]*h+a[14],1]};mat4.transformVector4x3=function(a,b){var a=mat4.inverse(a),f=b[0],g=b[1],h=b[2];return[a[0]*f+a[1]*g+a[2]*h,a[4]*f+a[5]*g+a[6]*h,a[8]*f+a[9]*g+a[10]*h,0]};mat4.getRow=function(a,b){b*=4;return[a[b],a[b+1],a[b+2],a[b+3]]};mat4.getCol=function(a,b){return[a[b],a[b+4],a[b+8],a[b+12]]};
@@ -36,7 +36,7 @@ mat4.translateY=function(a,b){return mat4.translate(a,[0,b,0])};mat4.translateZ=
 b[2]-a[2]*b[1],a[3]*b[1]-a[0]*b[2]+a[1]*b[3]+a[2]*b[0],a[3]*b[2]+a[0]*b[1]-a[1]*b[0]+a[2]*b[3]]},addMul:function(a,b,f){return f.length!=void 0&&f.length>=4?[a[0]+b[0]*f[0],a[1]+b[1]*f[1],a[2]+b[2]*f[2],a[3]+b[3]*f[3]]:[a[0]+b[0]*f,a[1]+b[1]*f,a[2]+b[2]*f,a[3]+b[3]*f]},scale:function(a,b){return b.length!=void 0&&b.length>=4?[a[0]*b[0],a[1]*a[1],a[2]*b[2],a[3]*b[3]]:[a[0]*b,a[1]*b,a[2]*b,a[3]*b]},lengthSq:function(a){return a[0]*a[0]+a[1]*a[1]+a[2]*a[2]+a[3]*a[3]},length:function(a){return Math.sqrt(a[0]*
 a[0]+a[1]*a[1]+a[2]*a[2]+a[3]*a[3])},normalize:function(a){var b=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]+a[3]*a[3]);return Math.abs(1-b)>1.0E-4?(b=1/b,[a[0]*b,a[1]*b,a[2]*b,a[3]*b]):a},inverse:function(a){var b=vec4.lengthSq(a);return b>1.0E-5?(b=1/b,[a[0]*-b,a[1]*-b,a[2]*-b,a[3]]):a},dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}};quat.applyRotation=function(a,b){return mat4.transformPoint(quat.toMatrix(a),b)};
 quat.lerp=function(a,b,f){return quat.normalize([a[0]+(b[0]-a[0])*f,a[1]+(b[1]-a[1])*f,a[2]+(b[2]-a[2])*f,a[3]+(b[3]-a[3])*f])};quat.slerp=function(a,b,f){var g=quat.dot(a,b);if(g>=0.9)return quat.lerp(a,b,f);var h=Math.sqrt(Math.abs(1-g*g));if(h<0.0010)return a;var g=g<0?-1:1,l=Math.asin(h),n=1/h,h=Math.sin((1-f)*l)*n,f=Math.sin(f*l)*n*g;quat.scale(a,h);quat.scale(b,f);return quat.normalize(quat.add(a,b))};
-quat.toMatrix=function(a){var b=2*a[0],f=2*a[1],g=2*a[2],h=b*a[3],l=f*a[3],n=g*a[3];b*=a[0];var o=f*a[0],q=g*a[0];f*=a[1];var p=g*a[1],a=g*a[2];return[1-(f+a),o+n,q-l,0,o-n,1-(b+a),p+h,0,q+l,p-h,1-(b+f),0,0,0,0,1]};var stat=function(){pages={};dlgId="";self=function(a,b,f,g,h){h==void 0&&(h=!0);category=!a?"default":a;pages[category]||(pages[category]=[]);pages[category].push(this);this.name=b;this.value=this.defValue=f;this.func=g;this.reset=h;this.reportInterval=500;stat.dirty=!0;stat.find=function(a,b){var f=pages[a];for(i=0;i<f.length;++i)if(f[i].name==b)return f[i];return null};stat.closePage=function(a){pages[a]=null;stat.dirty=!0};stat.reportAll=function(b){if(stat.dirty==!0){var f=document.getElementById(b);
+quat.toMatrix=function(a){var b=2*a[0],f=2*a[1],g=2*a[2],h=b*a[3],l=f*a[3],n=g*a[3];b*=a[0];var o=f*a[0],p=g*a[0];f*=a[1];var q=g*a[1],a=g*a[2];return[1-(f+a),o+n,p-l,0,o-n,1-(b+a),q+h,0,p+l,q-h,1-(b+f),0,0,0,0,1]};var stat=function(){pages={};dlgId="";self=function(a,b,f,g,h){h==void 0&&(h=!0);category=!a?"default":a;pages[category]||(pages[category]=[]);pages[category].push(this);this.name=b;this.value=this.defValue=f;this.func=g;this.reset=h;this.reportInterval=500;stat.dirty=!0;stat.find=function(a,b){var f=pages[a];for(i=0;i<f.length;++i)if(f[i].name==b)return f[i];return null};stat.closePage=function(a){pages[a]=null;stat.dirty=!0};stat.reportAll=function(b){if(stat.dirty==!0){var f=document.getElementById(b);
 if(!f)return;var g='<div id="stat_tabs">';g+="<ul>";for(a in pages)pages[a]&&(g+='<li><a href="#'+a+'">'+a+"</a></li>");g+="</ul>";for(a in pages)pages[a]&&(g+='<div id="'+a+'">',g+="</div>");g+="</div>";f.innerHTML=g;$("#stat_tabs").tabs();stat.dirty=!1}for(a in pages)f=document.getElementById(a),stat.report(f,a,b)};stat.report=function(a,b){b||(b="default");var f=pages[b];if(f){outputHTML='<table width="100%" cellspacing = 1 border = 0><tr>';var g=0;for(i=0;i<f.length;++i)if(outputHTML+='<td width=200 align=center bgcolor="#3F3F3F">',
 outputHTML+=f[i].func?f[i].name+" : "+f[i].func(f[i].value):f[i].name+" : "+f[i].value,outputHTML+="</td>",g++>=3&&(outputHTML+="</tr><tr>",g=0),f[i].reset)f[i].value=f[i].defValue;outputHTML+="</tr></table>";a.innerHTML=outputHTML}}};setInterval(function(){self.reportAll("RDGE_STATS")},500);return self}();
 dbCanvas=function(a,b){this.front=document.createElement("canvas");this.front.setAttribute("width",a);this.front.setAttribute("height",b);this.front.setAttribute("style","position:absolute; margin: 0.0em; padding: 0.0em;");this.front.ctx=this.front.getContext("2d");this.back=document.createElement("canvas");this.back.setAttribute("width",a);this.back.setAttribute("height",b);this.front.setAttribute("style","position:absolute; margin: 0.0em; padding: 0.0em;");this.back.ctx=this.back.getContext("2d");
@@ -64,7 +64,7 @@ this.ctx.clearColor(a[0],a[1],a[2],a[3])};this.setClearFlags=function(a){this.cl
 b,h){var l=a.split(".")[1],n=this.textureMap[a];if(n===void 0)n=this.createTexture(a+(l?"":".png"),b,h),this.textureMap[a]=n,n.lookUpName=a;return n};_texparams=function(a,b){this.wrap=a;this.mips=b};this.createTexture=function(a,b,h){var l=this.ctx.createTexture();b===void 0&&(b="CLAMP");h===void 0&&(h=!0);if(l)l.image=new Image,l.image.src=a,l.image.context=g_Engine.getContext(),l.texparams=new _texparams(b,h),l.image.onload=function(){this.context.ctxStateManager.RDGEInitState.loadTexture(l)};
 return l};this.commitTexture=function(a){this.ctx.bindTexture(this.ctx.TEXTURE_2D,a);this.ctx.texImage2D(this.ctx.TEXTURE_2D,0,this.ctx.RGBA,this.ctx.RGBA,this.ctx.UNSIGNED_BYTE,a.image);a.texparams.mips&&this.ctx.generateMipmap(this.ctx.TEXTURE_2D);this.ctx.texParameteri(this.ctx.TEXTURE_2D,this.ctx.TEXTURE_MAG_FILTER,this.ctx.LINEAR);this.ctx.texParameteri(this.ctx.TEXTURE_2D,this.ctx.TEXTURE_MIN_FILTER,a.texparams.mips?this.ctx.LINEAR_MIPMAP_LINEAR:this.ctx.LINEAR);this.ctx.texParameteri(this.ctx.TEXTURE_2D,
 this.ctx.TEXTURE_WRAP_S,a.texparams.wrap==="REPEAT"?this.ctx.REPEAT:this.ctx.CLAMP_TO_EDGE);this.ctx.texParameteri(this.ctx.TEXTURE_2D,this.ctx.TEXTURE_WRAP_T,a.texparams.wrap==="REPEAT"?this.ctx.REPEAT:this.ctx.CLAMP_TO_EDGE);this.ctx.bindTexture(this.ctx.TEXTURE_2D,null)};this.verify=function(a){var b=this.ctx.getError();b!=0&&window.console.log("GLError ( "+a+") : "+b)};this.createRenderTargetTexture=function(a,b,h,l){var n=this.ctx,o=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,o);o.width=
-b;o.height=h;b=n.createTexture();n.bindTexture(n.TEXTURE_2D,b);try{n.texImage2D(n.TEXTURE_2D,0,n.RGBA,o.width,o.height,0,n.RGBA,n.UNSIGNED_BYTE,null)}catch(q){h=new WebctxUnsignedByteArray(o.width*o.height*4),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,o.width,o.height,0,n.RGBA,n.UNSIGNED_BYTE,h)}n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,l?n.LINEAR_MIPMAP_NEAREST:n.LINEAR);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,
+b;o.height=h;b=n.createTexture();n.bindTexture(n.TEXTURE_2D,b);try{n.texImage2D(n.TEXTURE_2D,0,n.RGBA,o.width,o.height,0,n.RGBA,n.UNSIGNED_BYTE,null)}catch(p){h=new WebctxUnsignedByteArray(o.width*o.height*4),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,o.width,o.height,0,n.RGBA,n.UNSIGNED_BYTE,h)}n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,l?n.LINEAR_MIPMAP_NEAREST:n.LINEAR);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,
 n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);l&&n.generateMipmap(n.TEXTURE_2D);l=n.createRenderbuffer();n.bindRenderbuffer(n.RENDERBUFFER,l);n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,o.width,o.height);n.getError(n.bindFramebuffer(n.FRAMEBUFFER,o));n.getError(n.bindRenderbuffer(n.RENDERBUFFER,l));n.getError(n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,o.width,o.height));n.bindRenderbuffer(n.RENDERBUFFER,null);n.getError(n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,
 b,0));n.getError(n.framebufferRenderbuffer(n.FRAMEBUFFER,n.DEPTH_ATTACHMENT,n.RENDERBUFFER,l));n.bindFramebuffer(n.FRAMEBUFFER,null);n.bindTexture(n.TEXTURE_2D,null);n.bindRenderbuffer(n.RENDERBUFFER,null);n.bindFramebuffer(n.FRAMEBUFFER,null);b.id="RT_"+nodeIdGen.getId();b.frameBuffer=o;this.textureMap[a]&&window.console.log("Notification: render target: "+a+" has overwritten an existing render target");return this.textureMap[a]=b};this.defaultShaderDefintion={shaders:{defaultVShader:"assets/shaders/test_vshader.glsl",
 defaultFShader:"assets/shaders/test_fshader.glsl"},techniques:{defaultTechnique:[{vshader:"defaultVShader",fshader:"defaultFShader",attributes:{vert:{type:"vec3"},normal:{type:"vec3"},texcoord:{type:"vec2"}},params:{},states:{depthEnable:!0,blendEnable:!1,culling:!0,cullFace:"BACK"}}]}}};
@@ -91,61 +91,60 @@ g.bufferUsage):(this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[a.buffers
 0,new Float32Array(a.indexBuffer),a.indexUsage)):this.buffers[a.buffersID].indexHandle=this.createIndexBufferUINT16(a.indexBuffer,a.indexUsage):(this.ctx.bindBuffer(this.ctx.ELEMENT_ARRAY_BUFFER,this.buffers[a.buffersID].indexHandle),this.ctx.bufferSubData(this.ctx.ELEMENT_ARRAY_BUFFER,0,new Float32Array(a.indexBuffer),a.indexUsage)),a.indexCount=b,a.triCount=b/3):a.triCount=a.posCount/3}else this.createPrimitive(a)};
 _renderer.prototype.deletePrimitive=function(a){var b=this.buffers[a.buffersID];if(b){var f=this;b.forEach(function(a){f.ctx.deleteBuffer(a)});delete this.buffers[a.buffersID]}};_renderer.prototype.getPrimitiveBuffer=function(a,b){return this.buffers[a.buffersID][b]};
 _renderer.prototype.drawPrimitive=function(a,b,f){g_renderStats.numDrawCalls.value++;g_renderStats.numTriangles.value+=Math.floor(a.triCount);g_renderStats.numVerts.value+=Math.floor(a.coordCount/3);a.indexCount?this.drawIndexedPrimitive(a,b,f):this.drawNonIndexedPrimitive(a,b,f);a.useDoubleBuffer===!0&&a.flip(this)};
-_renderer.prototype.drawIndexedPrimitive=function(a,b,f){var g=b=0,h=a.buffersID,l="",n=f.length,o=0,q=a.frontBufferIndex*a.doubleBufferOffset;for(g_Engine.getContext();o<n;++o)if(g=f[o].loc,l=f[o].name,a.vertexDefinition[l])b=a.vertexDefinition[l].bufferIndex,this.ctx.enableVertexAttribArray(g),this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[h][q+b]),this.ctx.vertexAttribPointer(g,a.vertexDefinition[l].type,this.FLOAT,!1,0,0);this.ctx.bindBuffer(this.ctx.ELEMENT_ARRAY_BUFFER,this.buffers[h].indexHandle);
+_renderer.prototype.drawIndexedPrimitive=function(a,b,f){var g=b=0,h=a.buffersID,l="",n=f.length,o=0,p=a.frontBufferIndex*a.doubleBufferOffset;for(g_Engine.getContext();o<n;++o)if(g=f[o].loc,l=f[o].name,a.vertexDefinition[l])b=a.vertexDefinition[l].bufferIndex,this.ctx.enableVertexAttribArray(g),this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[h][p+b]),this.ctx.vertexAttribPointer(g,a.vertexDefinition[l].type,this.FLOAT,!1,0,0);this.ctx.bindBuffer(this.ctx.ELEMENT_ARRAY_BUFFER,this.buffers[h].indexHandle);
 this.ctx.drawElements(a.type,a.indexCount,a.indexElementSize,0);for(o=0;o<n;++o)this.ctx.disableVertexAttribArray(f[o].loc)};
-_renderer.prototype.drawIndexedPrimitiveWireFrame=function(a,b,f){for(var g=b=0,h=a.buffersID,l="",n=f.length,o=0,q=a.frontBufferIndex*a.doubleBufferOffset;o<n;++o)if(g=f[o].loc,l=f[o].name,a.vertexDefinition[l])b=a.vertexDefinition[l].bufferIndex,this.ctx.enableVertexAttribArray(g),this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[h][q+b]),this.ctx.vertexAttribPointer(g,a.vertexDefinition[l].type,this.FLOAT,!1,0,0);this.ctx.bindBuffer(this.ctx.ELEMENT_ARRAY_BUFFER,this.buffers[h].indexHandle);
+_renderer.prototype.drawIndexedPrimitiveWireFrame=function(a,b,f){for(var g=b=0,h=a.buffersID,l="",n=f.length,o=0,p=a.frontBufferIndex*a.doubleBufferOffset;o<n;++o)if(g=f[o].loc,l=f[o].name,a.vertexDefinition[l])b=a.vertexDefinition[l].bufferIndex,this.ctx.enableVertexAttribArray(g),this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[h][p+b]),this.ctx.vertexAttribPointer(g,a.vertexDefinition[l].type,this.FLOAT,!1,0,0);this.ctx.bindBuffer(this.ctx.ELEMENT_ARRAY_BUFFER,this.buffers[h].indexHandle);
 this.ctx.drawElements(this.LINE_LOOP,a.indexCount,a.indexElementSize,0);for(o=0;o<n;++o)this.ctx.disableVertexAttribArray(f[o].loc)};
-_renderer.prototype.drawNonIndexedPrimitive=function(a,b,f){for(var g=b=0,h=a.buffersID,l="",n=f.length,o=0,q=a.frontBufferIndex*a.doubleBufferOffset;o<n;++o)g=f[o].loc,l=f[o].name,b=a.vertexDefinition[l].bufferIndex,a.vertexDefinition[l]&&(this.ctx.enableVertexAttribArray(g),this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[h][q+b]),this.ctx.vertexAttribPointer(g,a.vertexDefinition[l].type,this.FLOAT,!1,0,0));this.ctx.drawArrays(a.type,0,a.triCount);for(o=0;o<n;++o)this.ctx.disableVertexAttribArray(f[o].loc)};
+_renderer.prototype.drawNonIndexedPrimitive=function(a,b,f){for(var g=b=0,h=a.buffersID,l="",n=f.length,o=0,p=a.frontBufferIndex*a.doubleBufferOffset;o<n;++o)g=f[o].loc,l=f[o].name,b=a.vertexDefinition[l].bufferIndex,a.vertexDefinition[l]&&(this.ctx.enableVertexAttribArray(g),this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.buffers[h][p+b]),this.ctx.vertexAttribPointer(g,a.vertexDefinition[l].type,this.FLOAT,!1,0,0));this.ctx.drawArrays(a.type,0,a.triCount);for(o=0;o<n;++o)this.ctx.disableVertexAttribArray(f[o].loc)};
 _renderer.prototype.drawIndexedPrimitiveSet=function(a){window.alert("drawIndexedPrimitiveSet is not implemented");for(var b=0;b<a.setCount;++b)this.ctx.drawElements(a.type[b],mesh.numIndices[b],a.indexElementSize[b],a.indexOffsets[b])};
 renderDebug=function(a){this.renderer=g_Engine.getContext().renderer;this.ctx=g_Engine.getContext().renderer.ctx;this.hidden=!1;this.maxLines=a;this.lineBuffer=[];this.posBufferData=new Float32Array(3*this.maxLines);this.colorBufferData=new Float32Array(4*this.maxLines);this.posBufferObject=renderer.createBufferFLOAT32(this.posBufferData,this.renderer.BUFFER_DYNAMIC);this.colorBufferObject=renderer.createBufferFLOAT32(this.colorBufferData,this.renderer.BUFFER_DYNAMIC);this.shader=new jshader;this.shader.def=
 {shaders:{defaultVShader:"\t\t\t\tuniform mat4 u_mvMatrix;\t\t\t\tuniform mat4 u_projMatrix;\t\t\t\tattribute vec3\ta_pos;\t\t\t\tattribute vec4  a_color;\t\t\t\tvarying vec4 v_color;\t\t\t\tvoid main() {\t\t\t\t\tgl_Position = u_projMatrix * u_mvMatrix * vec4(a_pos,1.0);\t\t\t\t\tv_color = a_color;\t\t\t\t}",defaultFShader:"\t\t\t\tprecision mediump float;\t\t\t\tvarying vec4 v_color;\t\t\t\tvoid main() {\t\t\t\t\tgl_FragColor = v_color;\t\t\t\t\tgl_FragColor.a = 1.0;\t\t\t\t}"},techniques:{defaultTechnique:[{vshader:"defaultVShader",
 fshader:"defaultFShader",attributes:{a_pos:{type:"vec3"},a_color:{type:"vec4"}},params:{u_projMat:{type:"mat4"},u_viewMat:{type:"mat4"}}}]}};this.shader.init()};renderDebug.prototype.hide=function(){this.hidden=!0};renderDebug.prototype.show=function(){this.hidden=!1};renderDebug.prototype.line=function(a,b,f,g){this.hidden||(f==void 0&&(f=[1,1,1,1]),g==void 0&&(g=f),this.lineBuffer.push([a,b,f,g]))};
 renderDebug.prototype.box=function(a,b,f){this.line([a[0],a[1],a[2]],[b[0],a[1],a[2]],f,f);this.line([b[0],a[1],a[2]],[b[0],b[1],a[2]],f,f);this.line([b[0],b[1],a[2]],[a[0],b[1],a[2]],f,f);this.line([a[0],b[1],a[2]],[a[0],a[1],a[2]],f,f);this.line([a[0],a[1],b[2]],[b[0],a[1],b[2]],f,f);this.line([b[0],a[1],b[2]],[b[0],b[1],b[2]],f,f);this.line([b[0],b[1],b[2]],[a[0],b[1],b[2]],f,f);this.line([a[0],b[1],b[2]],[a[0],a[1],b[2]],f,f);this.line([b[0],a[1],a[2]],[b[0],a[1],b[2]],f,f);this.line([b[0],b[1],
 a[2]],[b[0],b[1],b[2]],f,f);this.line([a[0],b[1],a[2]],[a[0],b[1],b[2]],f,f);this.line([a[0],a[1],a[2]],[a[0],a[1],b[2]],f,f)};renderDebug.prototype.frustum=function(a,b){this.line(a[0],a[1],b,b);this.line(a[1],a[2],b,b);this.line(a[2],a[3],b,b);this.line(a[3],a[4],b,b);this.line(a[4],a[5],b,b);this.line(a[5],a[6],b,b);this.line(a[6],a[7],b,b)};
-renderDebug.prototype.sphere=function(a,b,f){for(var g=0,h=Math.PI/8,l=0,n=2*Math.PI/8;g<Math.PI;){for(var o=Math.sin(g),q=Math.cos(g);l<2*Math.PI;){var p=Math.sin(l),r=Math.cos(l),s=a[0]+r*o*b,u=a[1]+q*b,v=a[2]+p*o*b;l+=n;var p=Math.sin(l),r=Math.cos(l),r=a[0]+r*o*b,x=a[1]+q*b,p=a[2]+p*o*b;l+=n;this.line([s,u,v],[r,x,p],f)}g+=h}};
+renderDebug.prototype.sphere=function(a,b,f){for(var g=0,h=Math.PI/8,l=0,n=2*Math.PI/8;g<Math.PI;){for(var o=Math.sin(g),p=Math.cos(g);l<2*Math.PI;){var q=Math.sin(l),r=Math.cos(l),s=a[0]+r*o*b,u=a[1]+p*b,v=a[2]+q*o*b;l+=n;var q=Math.sin(l),r=Math.cos(l),r=a[0]+r*o*b,x=a[1]+p*b,q=a[2]+q*o*b;l+=n;this.line([s,u,v],[r,x,q],f)}g+=h}};
 renderDebug.prototype.flush=function(){var a=0,b=this.renderer.cameraManager().getActiveCamera();mat4.inplace_copy(this.ctx.projectionMatrix,b.proj);for(mat4.inplace_copy(this.ctx.mvMatrix,b.view);this.lineBuffer.length>0;)for(var b=Math.min(this.lineBuffer.length,this.maxLines),f=0;b>0;){var g=this.lineBuffer.shift(),h=f*6,l=f*8;this.posBufferData[h+0]=g[0][0];this.posBufferData[h+1]=g[0][1];this.posBufferData[h+2]=g[0][2];this.posBufferData[h+3]=g[1][0];this.posBufferData[h+4]=g[1][1];this.posBufferData[h+
 5]=g[1][2];this.colorBufferData[l+0]=g[2][0];this.colorBufferData[l+1]=g[2][1];this.colorBufferData[l+2]=g[2][2];this.colorBufferData[l+3]=g[2][3];this.colorBufferData[l+4]=g[3][0];this.colorBufferData[l+5]=g[3][1];this.colorBufferData[l+6]=g[3][2];this.colorBufferData[l+7]=g[3][3];b--;f++;if(b<=0){this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.posBufferObject);this.ctx.bufferSubData(this.ctx.ARRAY_BUFFER,0,null);this.ctx.bufferSubData(this.ctx.ARRAY_BUFFER,0,this.posBufferData);this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,
 this.colorBufferObject);this.ctx.bufferSubData(this.ctx.ARRAY_BUFFER,0,null);this.ctx.bufferSubData(this.ctx.ARRAY_BUFFER,0,this.colorBufferData);this.ctx.disable(this.ctx.DEPTH_TEST);this.shader.begin();this.shader.beginPass(0);this.ctx.enableVertexAttribArray(0);this.ctx.enableVertexAttribArray(1);this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.posBufferObject);this.ctx.vertexAttribPointer(0,3,this.ctx.FLOAT,!1,0,0);this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,this.colorBufferObject);this.ctx.vertexAttribPointer(1,
 4,this.ctx.FLOAT,!1,0,0);this.ctx.drawArrays(this.ctx.LINES,0,f*2);this.shader.endPass();this.shader.end();this.ctx.enable(this.ctx.DEPTH_TEST);a++;this.ctx.finish();this.ctx.flush();break}}};renderUtils={createBox:function(){var a=g_Engine.getContext().renderer,b=new rdgePrimitiveDefinition;b.vertexDefinition={vert:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC},a_pos:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC},normal:{type:rdgeConstants.VS_ELEMENT_FLOAT3,bufferIndex:1,bufferUsage:rdgeConstants.BUFFER_STATIC},a_nrm:{type:rdgeConstants.VS_ELEMENT_FLOAT3,bufferIndex:1,bufferUsage:rdgeConstants.BUFFER_STATIC},
 texcoord:{type:rdgeConstants.VS_ELEMENT_FLOAT2,bufferIndex:2,bufferUsage:rdgeConstants.BUFFER_STATIC},a_uv:{type:rdgeConstants.VS_ELEMENT_FLOAT2,bufferIndex:2,bufferUsage:rdgeConstants.BUFFER_STATIC}};b.bufferStreams=[[1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,1,-1,-1,1,-1,-1,1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1],[0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,
 0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1],[1,1,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1]];b.streamUsage=[rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC];b.indexUsage=rdgeConstants.BUFFER_STREAM;b.indexBuffer=[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23];b.type=rdgeConstants.TRIANGLES;a.createPrimitive(b);return b}};
-function makeSphere(a,b,f,g){for(var h=[],l=[],n=[],o=[],q=0;q<=f;++q)for(var p=0;p<=g;++p){var r=q*Math.PI/f,s=p*2*Math.PI/g,u=Math.sin(r),v=Math.sin(s),r=Math.cos(r),s=Math.cos(s)*u;u*=v;var v=1-p/g,x=q/f;l.push(s);l.push(r);l.push(u);n.push(v);n.push(x);h.push(b*s);h.push(b*r);h.push(b*u)}for(q=0;q<f;++q)for(p=0;p<g;++p)b=q*(g+1)+p,s=b+g+1,o.push(b),o.push(s),o.push(b+1),o.push(s),o.push(s+1),o.push(b+1);f={};f.normalObject=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,f.normalObject);a.bufferData(a.ARRAY_BUFFER,
+function makeSphere(a,b,f,g){for(var h=[],l=[],n=[],o=[],p=0;p<=f;++p)for(var q=0;q<=g;++q){var r=p*Math.PI/f,s=q*2*Math.PI/g,u=Math.sin(r),v=Math.sin(s),r=Math.cos(r),s=Math.cos(s)*u;u*=v;var v=1-q/g,x=p/f;l.push(s);l.push(r);l.push(u);n.push(v);n.push(x);h.push(b*s);h.push(b*r);h.push(b*u)}for(p=0;p<f;++p)for(q=0;q<g;++q)b=p*(g+1)+q,s=b+g+1,o.push(b),o.push(s),o.push(b+1),o.push(s),o.push(s+1),o.push(b+1);f={};f.normalObject=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,f.normalObject);a.bufferData(a.ARRAY_BUFFER,
 new Float32Array(l),a.STATIC_DRAW);f.texCoordObject=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,f.texCoordObject);a.bufferData(a.ARRAY_BUFFER,new Float32Array(n),a.STATIC_DRAW);f.vertexObject=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,f.vertexObject);a.bufferData(a.ARRAY_BUFFER,new Float32Array(h),a.STATIC_DRAW);f.numIndices=o.length;f.indexObject=a.createBuffer();a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,f.indexObject);a.bufferData(a.ELEMENT_ARRAY_BUFFER,new Uint16Array(o),a.STREAM_DRAW);return f}
-function createPlane(a,b,f,g,h,l,n){for(var o=g_Engine.getContext().renderer,q=Array(a*b*3),p=Array(a*b*3),r=Array(a*b*2),s=Array(a*b),u=0,v=0,x=0;x<b;++x)for(var w=0;w<a;++w)q[u]=w*f-(a-1)*f*0.5,q[u+1]=0,q[u+2]=x*g-(b-1)*g*0.5,p[u]=n[0],p[u+1]=n[1],p[u+2]=n[2],r[v]=w/a*h,r[v+1]=x/b*l,u+=3,v+=2;for(x=f=0;x<b;++x)for(w=0;w<a;++w)s[f+2]=x*a+w,s[f+1]=x*a+(w+1),s[f]=(x+1)*a+w,s[f+5]=(x+1)*a+w,s[f+4]=x*a+(w+1),s[f+3]=(x+1)*a+(w+1),f+=6;a=new rdgePrimitiveDefinition;a.vertexDefinition={vert:{type:rdgeConstants.VS_ELEMENT_POS,
+function createPlane(a,b,f,g,h,l,n){for(var o=g_Engine.getContext().renderer,p=Array(a*b*3),q=Array(a*b*3),r=Array(a*b*2),s=Array(a*b),u=0,v=0,x=0;x<b;++x)for(var w=0;w<a;++w)p[u]=w*f-(a-1)*f*0.5,p[u+1]=0,p[u+2]=x*g-(b-1)*g*0.5,q[u]=n[0],q[u+1]=n[1],q[u+2]=n[2],r[v]=w/a*h,r[v+1]=x/b*l,u+=3,v+=2;for(x=f=0;x<b;++x)for(w=0;w<a;++w)s[f+2]=x*a+w,s[f+1]=x*a+(w+1),s[f]=(x+1)*a+w,s[f+5]=(x+1)*a+w,s[f+4]=x*a+(w+1),s[f+3]=(x+1)*a+(w+1),f+=6;a=new rdgePrimitiveDefinition;a.vertexDefinition={vert:{type:rdgeConstants.VS_ELEMENT_POS,
 bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC},a_pos:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC},normal:{type:rdgeConstants.VS_ELEMENT_FLOAT3,bufferIndex:1,bufferUsage:rdgeConstants.BUFFER_STATIC},a_nrm:{type:rdgeConstants.VS_ELEMENT_FLOAT3,bufferIndex:1,bufferUsage:rdgeConstants.BUFFER_STATIC},texcoord:{type:rdgeConstants.VS_ELEMENT_FLOAT2,bufferIndex:2,bufferUsage:rdgeConstants.BUFFER_STATIC},a_uv:{type:rdgeConstants.VS_ELEMENT_FLOAT2,bufferIndex:2,
-bufferUsage:rdgeConstants.BUFFER_STATIC}};a.bufferStreams=[q,p,r];a.streamUsage=[rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC];a.indexUsage=rdgeConstants.BUFFER_STREAM;a.indexBuffer=s;a.type=rdgeConstants.TRIANGLES;o.createPrimitive(a);return a}
-function createCubeVolume(a,b,f,g,h,l,n){for(var o=g_Engine.getContext().renderer,q=Array(a*f*b*3),p=Array(a*f*b),r=0,s=0,u=0;u<b;++u)for(var v=0;v<f;++v)for(var x=0;x<a;++x)q[r]=x*g-(a-1)*g*0.5,q[r+1]=u*h-(b-1)*h*0.5,q[r+2]=v*l-(f-1)*l*0.5,r+=3,p.push(s++);n&&q.slice();a=new rdgePrimitiveDefinition;a.vertexDefinition={a_pos:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC}};a.bufferStreams=[q];a.streamUsage=[rdgeConstants.BUFFER_DYNAMIC];a.indexUsage=rdgeConstants.BUFFER_STREAM;
-a.indexBuffer=p;a.type=rdgeConstants.POINTS;a.useDoubleBuffer=!0;o.createPrimitive(a);return a}
+bufferUsage:rdgeConstants.BUFFER_STATIC}};a.bufferStreams=[p,q,r];a.streamUsage=[rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC];a.indexUsage=rdgeConstants.BUFFER_STREAM;a.indexBuffer=s;a.type=rdgeConstants.TRIANGLES;o.createPrimitive(a);return a}
+function createCubeVolume(a,b,f,g,h,l,n){for(var o=g_Engine.getContext().renderer,p=Array(a*f*b*3),q=Array(a*f*b),r=0,s=0,u=0;u<b;++u)for(var v=0;v<f;++v)for(var x=0;x<a;++x)p[r]=x*g-(a-1)*g*0.5,p[r+1]=u*h-(b-1)*h*0.5,p[r+2]=v*l-(f-1)*l*0.5,r+=3,q.push(s++);n&&p.slice();a=new rdgePrimitiveDefinition;a.vertexDefinition={a_pos:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC}};a.bufferStreams=[p];a.streamUsage=[rdgeConstants.BUFFER_DYNAMIC];a.indexUsage=rdgeConstants.BUFFER_STREAM;
+a.indexBuffer=q;a.type=rdgeConstants.POINTS;a.useDoubleBuffer=!0;o.createPrimitive(a);return a}
 function createScreenAlignedQuad(){var a=g_Engine.getContext().renderer,b=new rdgePrimitiveDefinition;b.vertexDefinition={vert:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC},a_pos:{type:rdgeConstants.VS_ELEMENT_POS,bufferIndex:0,bufferUsage:rdgeConstants.BUFFER_STATIC},texcoord:{type:rdgeConstants.VS_ELEMENT_FLOAT2,bufferIndex:1,bufferUsage:rdgeConstants.BUFFER_STATIC},a_uv:{type:rdgeConstants.VS_ELEMENT_FLOAT2,bufferIndex:1,bufferUsage:rdgeConstants.BUFFER_STATIC}};
 b.bufferStreams=[[-1,1,0,1,1,0,-1,-1,0,-1,-1,0,1,1,0,1,-1,0],[0,0,0,1,1,1,1,1,1,0,0,0]];b.streamUsage=[rdgeConstants.BUFFER_STATIC,rdgeConstants.BUFFER_STATIC];b.type=rdgeConstants.TRIANGLES;a.createPrimitive(b);return b};bindMap={"int":function(a,b,f){a.uniform1iv(b,f)},"float":function(a,b,f){a.uniform1fv(b,f)},vec2:function(a,b,f){a.uniform2fv(b,f)},vec3:function(a,b,f){a.uniform3fv(b,f)},vec4:function(a,b,f){a.uniform4fv(b,f)},mat3:function(a,b,f){a.uniformMatrix3fv(b,!1,f)},mat4:function(a,b,f){a.uniformMatrix4fv(b,!1,f);g_Engine.getContext().debug.mat4CallCount++},tex2d:function(a,b,f){a.activeTexture(a.TEXTURE0+f[0]);a.bindTexture(a.TEXTURE_2D,f[1]);a.uniform1iv(b,[f[0]])},texCube:function(a,b,f){a.activeTexture(a.TEXTURE0+
 f[0]);a.bindTexture(a.TEXTURE_CUBE_MAP,f[1]);a.uniform1iv(b,[f[0]])}};lightDataMap=[function(a,b,f){a.uniform3fv(b,f.position)},function(a,b,f){a.uniform4fv(b,f.lightDiffuse)},function(a,b,f){a.uniform4fv(b,f.lightAmbient)},function(a,b,f){a.uniform4fv(b,f.lightSpecular)}];paramTypeNameMapping=null;
 jshader=function(a){this.name=a;this.def=null;this.technique={};this.params={};this.compiledShaders={};this.resetRS=!1;this.currentPass=0;this.type_jshader={};this.global={};this.renderer=g_Engine.getContext().renderer;this.ctx=this.renderer.ctx;if(a!=void 0&&a!=null)request=new XMLHttpRequest,request.open("GET",a,!1),request.send(null),this.def=JSON.parse(request.responseText);if(!paramTypeNameMapping)a=this.ctx,paramTypeNameMapping={},paramTypeNameMapping[a.BOOL]="bool",paramTypeNameMapping[a.INT]=
 "int",paramTypeNameMapping[a.FLOAT]="float",paramTypeNameMapping[a.FLOAT_VEC2]="vec2",paramTypeNameMapping[a.FLOAT_VEC3]="vec3",paramTypeNameMapping[a.FLOAT_VEC4]="vec4",paramTypeNameMapping[a.INT_VEC2]="vec2",paramTypeNameMapping[a.INT_VEC3]="vec3",paramTypeNameMapping[a.INT_VEC4]="vec4",paramTypeNameMapping[a.BOOL_VEC2]="vec2",paramTypeNameMapping[a.BOOL_VEC3]="vec3",paramTypeNameMapping[a.BOOL_VEC4]="vec4",paramTypeNameMapping[a.FLOAT_MAT2]="mat2",paramTypeNameMapping[a.FLOAT_MAT3]="mat3",paramTypeNameMapping[a.FLOAT_MAT4]=
-"mat4",paramTypeNameMapping[a.SAMPLER_2D]="tex2d",paramTypeNameMapping[a.SAMPLER_CUBE]="texCube";this.bindParameters=function(a){for(var f=a.defParamsList,g=a.lightParams,h=a.lightContext,l=f.length,n=0,o=Array(2),q=0,n=0;n<l;++n)if(f[n].type=="tex2d"||f[n].type=="texCube")o[0]=q++,o[1]=f[n].data[0],bindMap[f[n].type](this.ctx,f[n].loc,o);else bindMap[f[n].type](this.ctx,f[n].loc,rdgeGlobalParameters[f[n].name].data);f=rdgeConstants.MAX_MATERIAL_LIGHTS;for(l=0;l<f;++l)if(h[l]!=null&&g[l]){n=g[l].length;
-for(q=0;q<n;++q)lightDataMap[g[l][q].dataIndex](this.ctx,g[l][q].loc,h[l])}q=this.renderer.usedTextureUnits;f=a.paramsList;l=f.length;for(n=0;n<l;++n)if(f[n].type=="tex2d"||f[n].type=="texCube")o[0]=q++,o[1]=f[n].data[0],bindMap[f[n].type](this.ctx,f[n].loc,o);else bindMap[f[n].type](this.ctx,f[n].loc,f[n].data)};createJShaderTexture=function(a,f){var g=null,g=typeof f.data=="string"?a.canvas.renderer.getTextureByName(f.data,f.wrap,f.repeat,f.mips):a.canvas.renderer.getTextureByName(f.data.lookUpName,
+"mat4",paramTypeNameMapping[a.SAMPLER_2D]="tex2d",paramTypeNameMapping[a.SAMPLER_CUBE]="texCube";this.bindParameters=function(a){for(var f=a.defParamsList,g=a.lightParams,h=a.lightContext,l=f.length,n=0,o=Array(2),p=0,n=0;n<l;++n)if(f[n].type=="tex2d"||f[n].type=="texCube")o[0]=p++,o[1]=f[n].data[0],bindMap[f[n].type](this.ctx,f[n].loc,o);else bindMap[f[n].type](this.ctx,f[n].loc,rdgeGlobalParameters[f[n].name].data);f=rdgeConstants.MAX_MATERIAL_LIGHTS;for(l=0;l<f;++l)if(h[l]!=null&&g[l]){n=g[l].length;
+for(p=0;p<n;++p)lightDataMap[g[l][p].dataIndex](this.ctx,g[l][p].loc,h[l])}p=this.renderer.usedTextureUnits;f=a.paramsList;l=f.length;for(n=0;n<l;++n)if(f[n].type=="tex2d"||f[n].type=="texCube")o[0]=p++,o[1]=f[n].data[0],bindMap[f[n].type](this.ctx,f[n].loc,o);else bindMap[f[n].type](this.ctx,f[n].loc,f[n].data)};createJShaderTexture=function(a,f){var g=null,g=typeof f.data=="string"?a.canvas.renderer.getTextureByName(f.data,f.wrap,f.repeat,f.mips):a.canvas.renderer.getTextureByName(f.data.lookUpName,
 f.wrap,f.repeat,f.mips);return[g]};paramType=function(a,f,g,h,l){this.loc=a.getUniformLocation(h,f);this.loc==null&&window.console.log("ctx:"+a.canvas.id+", technique: "+l+", uniform: "+f+" was not found, jshader param will have no affect");f=g[f];this.type=f.type;if(f.data==void 0)switch(f.type){case "vec4":this.data=vec4.zero();break;case "vec3":this.data=vec3.zero();break;case "vec2":this.data=vec2.zero();break;case "mat4":this.data=mat4.zero();break;case "mat3":this.data=Array(9);break;case "mat2":this.data=
 [0,0,0,0];break;case "float":this.data=[0];break;case "int":this.data=[0];break;case "tex2d":this.data=[a.canvas.renderer.getTextureByName("assets/images/white.png")];break;case "texCube":this.data=[a.canvas.renderer.getTextureByName("assets/images/white.png")]}else this.data=f.type=="tex2d"||f.type=="texCube"?createJShaderTexture(a,f):f.data.slice();this.get=function(){return this.data.slice()};this.set=function(f){if(this.type=="tex2d"||this.type=="texCube")typeof f=="string"&&(f=a.canvas.renderer.getTextureByName(f)),
-this.data[0]=f;else for(var g=this.data.length,h=0;h<g;++h)this.data[h]=f[h]}};globalParam=function(a,f,g,h){this.type=g.type;this.data=g.data;this.loc=a.getUniformLocation(h,f);if(this.data){if(g.type=="tex2d"||g.type=="texCube")this.data=createJShaderTexture(a,g)}else switch(g.type){case "vec4":this.data=vec4.zero();break;case "vec3":this.data=vec3.zero();break;case "vec2":this.data=vec2.zero();break;case "mat4":this.data=mat4.zero();break;case "mat3":this.data=Array(9);break;case "mat2":this.data=
+this.data[0]=f;else for(var g=this.data.length,h=0;h<g;++h)this.data[h]=f[h]}};globalParam=function(a,f,g,h){this.type=g.type;this.data=g.data;this.loc=a.getUniformLocation(h,f);if(this.data)this.data=g.type=="tex2d"||g.type=="texCube"?createJShaderTexture(a,g):g.data.slice();else switch(g.type){case "vec4":this.data=vec4.zero();break;case "vec3":this.data=vec3.zero();break;case "vec2":this.data=vec2.zero();break;case "mat4":this.data=mat4.zero();break;case "mat3":this.data=Array(9);break;case "mat2":this.data=
 [0,0,0,0];break;case "float":this.data=[0];break;case "int":this.data=[0];break;case "tex2d":this.data=[a.canvas.renderer.getTextureByName("assets/images/white.png")];break;case "texCube":this.data=[a.canvas.renderer.getTextureByName("assets/images/white.png")]}this.get=function(){return this.data.slice()};this.set=function(f){if(this.type=="tex2d"||this.type=="texCube")typeof f=="string"&&(f=a.canvas.renderer.getTextureByName(f)),this.data[0]=f;else for(var g=this.data.length,h=0;h<g;++h)this.data[h]=
-f[h]}};this.init=function(){var a=this.def.techniques,f=null;for(t in a){var f=t,g=a[t];this[t]={passes:[]};for(var h=g.length,l=0;l<h;){var n=this.buildProgram(g[l]);this.ctx.useProgram(n);var o=this.ctx.getProgramParameter(n,this.ctx.ACTIVE_ATTRIBUTES);for(j=0;j<o;++j){var q=this.ctx.getActiveAttrib(n,j);g[l].attributes[q.name]={type:paramTypeNameMapping[q.type]}}o=this.ctx.getProgramParameter(n,this.ctx.ACTIVE_UNIFORMS);for(j=0;j<o;++j)q=this.ctx.getActiveUniform(n,j),rdgeGlobalParameters[q.name]||
-(g[l].params[q.name]={type:paramTypeNameMapping[q.type]});n.ctxId=this.ctx.canvas.id;if(n)this[t].passes.push({program:n,params:{},defParams:{},states:g[l].states,attributes:g[l].attribPairs});else{this.renderer.console.log("Build errors found in technique: "+t);this.def[t]=null;break}for(var p in rdgeGlobalParameters)if(o=new globalParam(this.ctx,p,rdgeGlobalParameters[p],n),o.loc!=null)o.loc.ctxID=this.ctx.canvas.id,this[t].passes[l].defParams[p]=o,this.global[p]=o;this[t].passes[l].lightParams=
-[null,null,null,null];this[t].passes[l].lightContext=[null,null,null,null];if(!this[t].passes[l].paramsList)this[t].passes[l].paramsList=[];o=rdgeConstants.MAX_MATERIAL_LIGHTS;for(q=0;q<o;++q){this[t].passes[l].lightParams[q]=null;var r=0,s;for(s in g_Engine.lightManager.lightUniforms[q])loc=this.ctx.getUniformLocation(n,s),loc!=null&&(this[t].passes[l].lightParams[q]||(this[t].passes[l].lightParams[q]=[]),this[t].passes[l].lightParams[q].push({loc:loc,name:s,dataIndex:r})),r++}for(p in g[l].params)typeof g[l].params[p]!=
-"string"&&(o=new paramType(this.ctx,p,g[l].params,n,t),this[t].passes[l].params[p]=o,this[t][p]=o);for(p in g[l].params)typeof g[l].params[p]=="string"&&(n=g[l].params[p],(o=this[t].passes[l].params[n]||this.global[n])?(this[t].passes[l].params[p]=o,this[t][p]=o):window.console.warn("jshader: alias entry '"+p+"' was ignored because '"+n+"' could not be found."));l++}}for(t in a){h=this[t].passes.length;for(l=0;l<h;++l){this[t].passes[l].defParamsList=[];for(p in this[t].passes[l].params)g=this[t].passes[l].params[p],
-g.name=p,this[t].passes[l].paramsList.push(g);for(p in this[t].passes[l].defParams)g=this[t].passes[l].defParams[p],g.name=p,this[t].passes[l].defParamsList.push(g)}}this.setTechnique(f)};this.initLocalParameter=function(a,f){var g=this.def.techniques;for(t in g)for(var h=g[t],l=h.length,n=0;n<l;){var o=new paramType(this.ctx,a,f,h[n].program,t);if(o){h[n][a]=o;if(!h[n].paramsList)h[n].paramsList=[];h[n].paramsList.push(o)}n++}};this.buildShader=function(a,f){var g="#define PC\n";g+=f;f=g;g=this.ctx.createShader(a);
-if(g==null)return this.renderer.console.log("*** Error: unable to create shader '"+a+"'"),null;this.ctx.shaderSource(g,f);this.ctx.compileShader(g);if(!this.ctx.getShaderParameter(g,this.ctx.COMPILE_STATUS)){var h=this.ctx.getShaderInfoLog(g);window.console.error("*** Error compiling shader '"+a+"':"+h);this.ctx.deleteShader(g);return null}return g};this.buildProgram=function(a){window.console.log("building shader pair: <"+a.vshader+", "+a.fshader+">");var f=this.def.shaders[a.vshader],g=this.def.shaders[a.fshader];
-this.ctx.useProgram(null);var h=null,l=null;f.indexOf("{")!=-1?l=f:(l=new XMLHttpRequest,l.open("GET",f,!1),l.send(null),l=l.responseText);h=this.buildShader(this.ctx.VERTEX_SHADER,l);l=null;f.indexOf("{")!=-1?l=g:(l=new XMLHttpRequest,l.open("GET",g,!1),l.send(null),l=l.responseText);l=this.buildShader(this.ctx.FRAGMENT_SHADER,l);if(!h||!l)return null;this.compiledShaders[a.vshader]=h;this.compiledShaders[a.fshader]=l;f=this.ctx.createProgram();if(!f)return null;this.ctx.attachShader(f,h);this.ctx.attachShader(f,
-l);g=0;a.attribPairs=[];for(var n in a.attributes)a.attribPairs.push({loc:g,name:n}),this.ctx.bindAttribLocation(f,g++,n);this.ctx.linkProgram(f);return!this.ctx.getProgramParameter(f,this.ctx.LINK_STATUS)?(a=this.ctx.getProgramInfoLog(f),window.console.log("Error in program linking:"+a),this.ctx.deleteProgram(f),this.ctx.deleteProgram(l),this.ctx.deleteProgram(h),null):f};this.setLightContext=function(a){for(t in this.technique)for(var f=this.technique.passes.length,g=0;g<f;++g)this.technique.passes[g].lightContext=
-a.slice()};this.setTextureContext=function(a){for(var f=this.technique.passes.length,g=null,h=0,l=a.length;h<l;++h)for(var n=0;n<f;++n)g=a[h],this.technique.passes[n].defParams[g.name]&&this.technique.passes[n].defParams[g.name].set(g.handle),this.technique.passes[n].params[g.name]&&this.technique.passes[n].params[g.name].set(g.data[0])};this.setTechnique=function(a){if(this[a]!=void 0)return this.technique=this[a],!0;this.ctx.console.log("Failed to set technique:"+a);return!1};this.beginRenderState=
-function(a){var f=this.technique.passes[a].states;if(f!=void 0){(f.depthEnable!=void 0?f.depthEnable:1)?(f.depthFunc&&this.ctx.depthFunc(this.ctx[f.depthFunc]),f.offset&&(this.ctx.enable(this.ctx.POLYGON_OFFSET_FILL),this.ctx.polygonOffset(f.offset[0],f.offset[1])),f.depthWrite&&this.ctx.depthMask(f.depthWrite),f.depthRangeMin&&this.ctx.depthRange(f.depthRangeMin),f.depthRangeMax&&this.ctx.depthRange(f.depthRangeMax)):(this.ctx.disable(this.ctx.DEPTH_TEST),this.ctx.depthFunc(this.ctx[f.depthFunc]),
-this.ctx.depthMask(!0));if(f.blendEnable!=void 0&&f.blendEnable){var g=f.srcBlend!=void 0?f.srcBlend:"ONE",h=f.dstBlend!=void 0?f.dstBlend:"ZERO";this.ctx.enable(this.ctx.BLEND);this.ctx.blendFunc(this.ctx[g],this.ctx[h])}f.culling&&(f.culling?this.ctx.enable(this.ctx.CULL_FACE):this.ctx.disable(this.ctx.CULL_FACE));f.cullFace&&this.ctx.cullFace(this.ctx[f.cullFace]);f.pointsprite&&(f.pointsprite===!0?this.renderer.enablePointSprites():this.renderer.disablePointSprites());this.resetRS=this.technique.passes[a].states.reset==
-void 0||this.technique.passes[a].states.reset==!0}};this.endRenderState=function(){var a=this.ctx;this.resetRS&&(a.enable(this.ctx.DEPTH_TEST),a.disable(this.ctx.BLEND),a.depthFunc(this.ctx.LESS),a.disable(this.ctx.POLYGON_OFFSET_FILL),a.disable(this.ctx.CULL_FACE))};this.begin=function(){this.currentPass=null;return this.def==null||this.technique==null?0:this.technique.passes.length};this.beginPass=function(a){this.currentPass=this.technique.passes[a];this.ctx.useProgram(this.currentPass.program);
-this.bindParameters(this.currentPass);this.beginRenderState(a);return this.currentPass};this.endPass=function(){this.endRenderState();this.ctx.useProgram(null)};this.end=function(){};this.exportShader=function(){for(t in this.def.techniques)for(var a=this[t].passes.length,f=0;f<a;++f){this[t].passes[f].paramsList=[];this[t].passes[f].defParamsList=[];for(var g in this[t].passes[f].params){var h=this.def.techniques[t][f];if(h&&this[t].passes[f].params[g].type!="tex2d"&&this[t].passes[f].params[g]!=
-"texCube")h.params[g].data=this[t].passes[f].params[g].data}}return JSON.stringify(this.def)}};jpassGeoSet={BACKGROUND:1,OPAQUE:2,TRANSPARENT:4,ADDITIVE:8,TRANSLUCENT:16,FOREGROUND:32,ALL:127,SCREEN_QUAD:128,SHADOW:256,MAXSETS:9};
+f[h]}};this.init=function(){var a=this.def.techniques,f=null;for(t in a){var f=t,g=a[t];this[t]={passes:[]};for(var h=g.length,l=0;l<h;){var n=this.buildProgram(g[l]);this.ctx.useProgram(n);var o=this.ctx.getProgramParameter(n,this.ctx.ACTIVE_ATTRIBUTES);for(j=0;j<o;++j){var p=this.ctx.getActiveAttrib(n,j);g[l].attributes[p.name]={type:paramTypeNameMapping[p.type]}}o=this.ctx.getProgramParameter(n,this.ctx.ACTIVE_UNIFORMS);for(j=0;j<o;++j)p=this.ctx.getActiveUniform(n,j),rdgeGlobalParameters[p.name]||
+(g[l].params[p.name]={type:paramTypeNameMapping[p.type]});n.ctxId=this.ctx.canvas.id;if(n)this[t].passes.push({program:n,params:{},defParams:{},states:g[l].states,attributes:g[l].attribPairs});else{this.renderer.console.log("Build errors found in technique: "+t);this.def[t]=null;break}for(var q in rdgeGlobalParameters)if(o=new globalParam(this.ctx,q,rdgeGlobalParameters[q],n),o.loc!=null)o.loc.ctxID=this.ctx.canvas.id,this[t].passes[l].defParams[q]=o,this.global[q]=o;this[t].passes[l].lightParams=
+[null,null,null,null];this[t].passes[l].lightContext=[null,null,null,null];if(!this[t].passes[l].paramsList)this[t].passes[l].paramsList=[];o=rdgeConstants.MAX_MATERIAL_LIGHTS;for(p=0;p<o;++p){this[t].passes[l].lightParams[p]=null;var r=0,s;for(s in g_Engine.lightManager.lightUniforms[p])loc=this.ctx.getUniformLocation(n,s),loc!=null&&(this[t].passes[l].lightParams[p]||(this[t].passes[l].lightParams[p]=[]),this[t].passes[l].lightParams[p].push({loc:loc,name:s,dataIndex:r})),r++}for(q in g[l].params)typeof g[l].params[q]!=
+"string"&&(o=new paramType(this.ctx,q,g[l].params,n,t),this[t].passes[l].params[q]=o,this[t][q]=o);for(q in g[l].params)typeof g[l].params[q]=="string"&&(this[t][q]=this[t].passes[l].params[q]);l++}}for(t in a){h=this[t].passes.length;for(l=0;l<h;++l){this[t].passes[l].defParamsList=[];for(q in this[t].passes[l].params)g=this[t].passes[l].params[q],g.name=q,this[t].passes[l].paramsList.push(g);for(q in this[t].passes[l].defParams)g=this[t].passes[l].defParams[q],g.name=q,this[t].passes[l].defParamsList.push(g)}}this.setTechnique(f)};
+this.initLocalParameter=function(a,f){var g=this.def.techniques;for(t in g)for(var h=g[t],l=h.length,n=0;n<l;){var o=new paramType(this.ctx,a,f,h[n].program,t);if(o){h[n][a]=o;if(!h[n].paramsList)h[n].paramsList=[];h[n].paramsList.push(o)}n++}};this.buildShader=function(a,f){var g="#define PC\n";g+=f;f=g;g=this.ctx.createShader(a);if(g==null)return this.renderer.console.log("*** Error: unable to create shader '"+a+"'"),null;this.ctx.shaderSource(g,f);this.ctx.compileShader(g);if(!this.ctx.getShaderParameter(g,
+this.ctx.COMPILE_STATUS)){var h=this.ctx.getShaderInfoLog(g);window.console.error("*** Error compiling shader '"+a+"':"+h);this.ctx.deleteShader(g);return null}return g};this.buildProgram=function(a){window.console.log("building shader pair: <"+a.vshader+", "+a.fshader+">");var f=this.def.shaders[a.vshader],g=this.def.shaders[a.fshader];this.ctx.useProgram(null);var h=null,l=null;f.indexOf("{")!=-1?l=f:(l=new XMLHttpRequest,l.open("GET",f,!1),l.send(null),l=l.responseText);h=this.buildShader(this.ctx.VERTEX_SHADER,
+l);l=null;f.indexOf("{")!=-1?l=g:(l=new XMLHttpRequest,l.open("GET",g,!1),l.send(null),l=l.responseText);l=this.buildShader(this.ctx.FRAGMENT_SHADER,l);if(!h||!l)return null;this.compiledShaders[a.vshader]=h;this.compiledShaders[a.fshader]=l;f=this.ctx.createProgram();if(!f)return null;this.ctx.attachShader(f,h);this.ctx.attachShader(f,l);g=0;a.attribPairs=[];for(var n in a.attributes)a.attribPairs.push({loc:g,name:n}),this.ctx.bindAttribLocation(f,g++,n);this.ctx.linkProgram(f);return!this.ctx.getProgramParameter(f,
+this.ctx.LINK_STATUS)?(a=this.ctx.getProgramInfoLog(f),window.console.log("Error in program linking:"+a),this.ctx.deleteProgram(f),this.ctx.deleteProgram(l),this.ctx.deleteProgram(h),null):f};this.setLightContext=function(a){for(t in this.technique)for(var f=this.technique.passes.length,g=0;g<f;++g)this.technique.passes[g].lightContext=a.slice()};this.setTextureContext=function(a){for(var f=this.technique.passes.length,g=null,h=0,l=a.length;h<l;++h)for(var n=0;n<f;++n)g=a[h],this.technique.passes[n].defParams[g.name]&&
+this.technique.passes[n].defParams[g.name].set(g.handle),this.technique.passes[n].params[g.name]&&this.technique.passes[n].params[g.name].set(g.data[0])};this.setTechnique=function(a){if(this[a]!=void 0)return this.technique=this[a],!0;this.ctx.console.log("Failed to set technique:"+a);return!1};this.beginRenderState=function(a){var f=this.technique.passes[a].states;if(f!=void 0){(f.depthEnable!=void 0?f.depthEnable:1)?(f.depthFunc&&this.ctx.depthFunc(this.ctx[f.depthFunc]),f.offset&&(this.ctx.enable(this.ctx.POLYGON_OFFSET_FILL),
+this.ctx.polygonOffset(f.offset[0],f.offset[1])),f.depthWrite&&this.ctx.depthMask(f.depthWrite),f.depthRangeMin&&this.ctx.depthRange(f.depthRangeMin),f.depthRangeMax&&this.ctx.depthRange(f.depthRangeMax)):(this.ctx.disable(this.ctx.DEPTH_TEST),this.ctx.depthFunc(this.ctx[f.depthFunc]),this.ctx.depthMask(!0));if(f.blendEnable!=void 0&&f.blendEnable){var g=f.srcBlend!=void 0?f.srcBlend:"ONE",h=f.dstBlend!=void 0?f.dstBlend:"ZERO";this.ctx.enable(this.ctx.BLEND);this.ctx.blendFunc(this.ctx[g],this.ctx[h])}f.culling&&
+(f.culling?this.ctx.enable(this.ctx.CULL_FACE):this.ctx.disable(this.ctx.CULL_FACE));f.cullFace&&this.ctx.cullFace(this.ctx[f.cullFace]);f.pointsprite&&(f.pointsprite===!0?this.renderer.enablePointSprites():this.renderer.disablePointSprites());this.resetRS=this.technique.passes[a].states.reset==void 0||this.technique.passes[a].states.reset==!0}};this.endRenderState=function(){var a=this.ctx;this.resetRS&&(a.enable(this.ctx.DEPTH_TEST),a.disable(this.ctx.BLEND),a.depthFunc(this.ctx.LESS),a.disable(this.ctx.POLYGON_OFFSET_FILL),
+a.disable(this.ctx.CULL_FACE))};this.begin=function(){this.currentPass=null;return this.def==null||this.technique==null?0:this.technique.passes.length};this.beginPass=function(a){this.currentPass=this.technique.passes[a];this.ctx.useProgram(this.currentPass.program);this.bindParameters(this.currentPass);this.beginRenderState(a);return this.currentPass};this.endPass=function(){this.endRenderState();this.ctx.useProgram(null)};this.end=function(){};this.exportShader=function(){for(t in this.def.techniques)for(var a=
+this[t].passes.length,f=0;f<a;++f){this[t].passes[f].paramsList=[];this[t].passes[f].defParamsList=[];for(var g in this[t].passes[f].params){var h=this.def.techniques[t][f];if(h&&this[t].passes[f].params[g].type!="tex2d"&&this[t].passes[f].params[g]!="texCube")h.params[g].data=this[t].passes[f].params[g].data}}return JSON.stringify(this.def)}};jpassGeoSet={BACKGROUND:1,OPAQUE:2,TRANSPARENT:4,ADDITIVE:8,TRANSLUCENT:16,FOREGROUND:32,ALL:127,SCREEN_QUAD:128,SHADOW:256,MAXSETS:9};
 _jpassBaseClass=function(){this.context=g_Engine.getContext();this.renderer=g_Engine.getContext().renderer;this.sortCats=rdgeConstants.categoryEnumeration;this.bucketCount=rdgeConstants.categoryEnumeration.MAX_CAT;this.renderOrder=[];this.renderOrder[this.sortCats.BACKGROUND]=0;this.renderOrder[this.sortCats.OPAQUE]=1;this.renderOrder[this.sortCats.TRANSPARENT]=2;this.renderOrder[this.sortCats.ADDITIVE]=3;this.renderOrder[this.sortCats.TRANSLUCENT]=4;this.renderOrder[this.sortCats.FOREGROUND]=5;this.name=
 "renderPass_"+nodeIdGen.getId();this.visibility=1;this.onHide=function(){};this.hidePass=function(){this.onHide();for(var a=0,b=this.children.length;a<b;++a)this.children[a].hidePass()};this.defaultTargetOut={};this.outputs=[];this.dirty=!1;this.outputIndex=0;this.inputs=[];this.textures=[];this.frustum_culling="enable";this.clearColor=this.clear=null;this.renderList=[];this.children=[];this.technique=this.shader=null;this.geometrySet="SCREEN_QUAD";this.camera=null;this.init=function(){};this.insertChildPass=
-function(a){this.children[a.name]=a};this.process=function(){var a,b,f,g,h,l,n,o=0,q=0,p=l=0,r=g_Engine.getContext().renderer;this.bindOutput();this.preRender();var s=r.cameraManager().getActiveCamera();this.technique&&this.shader.setTechnique(this.technique);r.projectionMatrix=s.proj;rdgeGlobalParameters.u_inv_viewport_width.set([1/r.vpWidth]);rdgeGlobalParameters.u_inv_viewport_height.set([1/r.vpHeight]);rdgeGlobalParameters.u_farZ.set([s.zFar()]);rdgeGlobalParameters.u_projMatrix.set(r.projectionMatrix);
+function(a){this.children[a.name]=a};this.process=function(){var a,b,f,g,h,l,n,o=0,p=0,q=l=0,r=g_Engine.getContext().renderer;this.bindOutput();this.preRender();var s=r.cameraManager().getActiveCamera();this.technique&&this.shader.setTechnique(this.technique);r.projectionMatrix=s.proj;rdgeGlobalParameters.u_inv_viewport_width.set([1/r.vpWidth]);rdgeGlobalParameters.u_inv_viewport_height.set([1/r.vpHeight]);rdgeGlobalParameters.u_farZ.set([s.zFar()]);rdgeGlobalParameters.u_projMatrix.set(r.projectionMatrix);
 for(var u=0,v=this.renderList.length;u<v;++u){f=this.renderList[u].length;for(o=0;o<f;++o)if(h=this.renderList[u][o].node,h.world){a=this.renderList[u][o].context