<jittershader name="viz.tangents.jxs">
	<description>Visualize The Tangents in Model Space</description>

	<param name="modelViewProjectionMatrix" type="mat4" state="MODELVIEW_PROJECTION_MATRIX" />
	<param name="projectionMatrix" type="mat4" state="PROJECTION_MATRIX" />
	<param name="modelViewMatrix" type="mat4" state="MODELVIEW_MATRIX" />
	<param name="position" type="vec3" state="POSITION" />

	<language name="glsl" version="1.2">
		<program name="vp" type="vertex">
<![CDATA[

#version 120

void main(void)
{
	//just send the things as they are
	gl_Position = gl_ModelViewMatrix*gl_Vertex;
}

]]>		
		</program>
		<program name="gp" vertices_out="2" input_type="lines_adjacency" output_type="line_strip" type="geometry">
<![CDATA[

#version 120
#extension GL_EXT_geometry_shader4 : enable

varying out vec3 T;

void main(void)
{
	T = gl_PositionIn[2].xyz - gl_PositionIn[1].xyz;
	gl_Position = gl_ProjectionMatrix*gl_PositionIn[1];
	EmitVertex();
	
	T = gl_PositionIn[3].xyz - gl_PositionIn[2].xyz;
	gl_Position = gl_ProjectionMatrix*gl_PositionIn[2];
	EmitVertex();
	
	EndPrimitive();
}


]]>
		</program>
		<program name="fp" type="fragment">
<![CDATA[

#version 120


varying vec3 T;

void main (void)
{
	gl_FragColor = vec4(normalize(T), 1.);
}


]]>		
		</program>		
	</language>

<language name="glsl" version="1.5">
	<bind param="position" program="vp" />
	<bind param="modelViewProjectionMatrix" program="gp" />
	<bind param="projectionMatrix" program="gp" />
	<bind param="modelViewMatrix" program="vp" />

<program name="vp" type="vertex">
<![CDATA[

#version 330

uniform mat4 modelViewMatrix;

in vec3 position;

void main(void)
{
	//just send the things as they are
	gl_Position = modelViewMatrix*vec4(position, 1.0);
}

]]>		
		</program>
		<program name="gp" vertices_out="2" input_type="lines_adjacency" output_type="line_strip" type="geometry">
<![CDATA[

#version 330

layout (lines_adjacency) in;
layout (line_strip, max_vertices=2) out;

uniform mat4 projectionMatrix;

out jit_PerVertex {
	vec3 T;
};

void main(void)
{
	T = gl_in[2].gl_Position.xyz - gl_in[1].gl_Position.xyz;
	gl_Position = projectionMatrix*gl_in[1].gl_Position;
	EmitVertex();
	
	T = gl_in[3].gl_Position.xyz - gl_in[2].gl_Position.xyz;
	gl_Position = projectionMatrix*gl_in[2].gl_Position;
	EmitVertex();
	
	EndPrimitive();
}


]]>
		</program>
		<program name="fp" type="fragment">
<![CDATA[

#version 330

layout (location = 0) out vec4 color;

in jit_PerVertex {
	vec3 T;
} jit_in;

void main (void)
{
	color = vec4(normalize(jit_in.T), 1.);
}

]]>		
		</program>		
	</language>
</jittershader>