//
//Copyright (c) 2010 Human Engines Inc. All rights reserved.
// 
//Redistribution and use in source and binary forms, with or without
//modification, are permitted provided that the following conditions are
//met:
// 
//   * Redistributions of source code must retain the above copyright
//notice, this list of conditions and the following disclaimer.
//
//   * Redistributions in binary form must reproduce the above
//copyright notice, this list of conditions and the following disclaimer
//in the documentation and/or other materials provided with the
//distribution.
// 
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

var vortexVShader = [
"attribute vec3 vert;",
"attribute vec3 normal;",
"attribute vec2 texcoord;",
"uniform mat4 u_modelViewProjMatrix;",
"uniform mat4 u_normalMatrix;",
"uniform mat4 u_worldMatrix;",
"uniform float u_time;",
"uniform float baseRotation;",
"uniform float corkscrewRotation;",
"uniform float corkscrewRange;",
"uniform float taperEnd;",
"uniform float taperStart;",
"uniform vec4  lineColor;",
"uniform vec4  swapColor;",
"uniform float swapTime;",
"varying vec3 vNormal;",
"varying vec4 vColor;",
"varying vec2 vTexcoord;",
"varying float depth;",
"void main()",
"{",
"	vec3 pos = vert;",
"	depth = (1000 - vert.z)/1000;",
"	float z  = (pos.z+(u_worldMatrix[3].z)+(corkscrewRange*0.5)) / corkscrewRange;",   
"	float rot = baseRotation + corkscrewRotation * z;",
"	pos.x = vert.x*cos(rot) - vert.y*sin(rot);",
"	pos.y = vert.y*cos(rot) + vert.x*sin(rot);",
"	z = clamp(z, 0.0, 1.0);",
"	float scalar = taperStart + ((taperEnd-taperStart) * (1.0-z));",
"	pos.xy *= scalar;",
"	vNormal = normalize(vec3(pos.xy, 0.0));",
"	vTexcoord = texcoord;",
"	float offset = vNormal.x*0.05 + vNormal.y*0.05;",
"	if (z+offset > swapTime)	vColor = lineColor;",
"	else				vColor = swapColor;",
"	z = clamp(z, 0.0, 1.0)*2.0;",
"	if (z>1.0) z=2.0-z;",
"	vColor *= vec4(vec3(z), 1.0);",
"	gl_Position	= u_modelViewProjMatrix * vec4(pos, 1.0);",
"}"].join("\n");

