#ifdef VERTEX_SHADER
#define attribute in
#define varying out

out gl_PerVertex
{
  vec4 gl_Position;
};

#else
#define varying in
#endif

layout(std140, binding=0) uniform entityblock
{
	mat4 m_modelviewproj;
	mat4 m_model;
	mat4 m_modelinv;
	vec3 e_eyepos;
	float e_time;
	vec3 e_light_ambient;	float epad1;
	vec3 e_light_dir;	float epad2;
	vec3 e_light_mul;	float epad3;
	vec4 e_lmscales[4];
	vec3 e_uppercolour;	float epad4;
	vec3 e_lowercolour;	float epad5;
	vec3 e_glowmod;		float epad6;
	vec4 e_colourident;
	vec4 w_fogcolours;
	float w_fogdensity;	float w_fogdepthbias;	 vec2 epad7;
};
#define e_lmscale (e_lmscales[0])

layout(std140, binding=1) uniform lightblock
{
	mat4 l_cubematrix;
	vec3 l_lightposition; 	float lpad1;
	vec3 l_lightcolour; 		float lpad2;
	vec3 l_lightcolourscale; 	float l_lightradius;
	vec4 l_shadowmapproj;
	vec2 l_shadowmapscale;	vec2 lpad3;
};


#ifdef VERTEX_SHADER
layout(location=0) attribute vec3 v_position;
layout(location=1) attribute vec2 v_texcoord;
layout(location=2) attribute vec4 v_colour;
layout(location=3) attribute vec2 v_lmcoord;
layout(location=4) attribute vec3 v_normal;
layout(location=5) attribute vec3 v_svector;
layout(location=6) attribute vec3 v_tvector;
#endif
#ifdef FRAGMENT_SHADER
layout(location=0) out vec4 outcolour;
#define gl_FragColor outcolour
#endif

#define texture2D texture
#define textureCube texture

/*defined by front-end, with bindings that suit us
uniform sampler2D s_t0;
uniform sampler2D s_t1;
uniform sampler2D s_t2;
uniform sampler2D s_t3;
uniform sampler2D s_t4;
uniform sampler2D s_t5;
uniform sampler2D s_t6;
uniform sampler2D s_t7;
uniform sampler2D s_diffuse;
uniform sampler2D s_normalmap;
uniform sampler2D s_specular;
uniform sampler2D s_upper;
uniform sampler2D s_lower;
uniform sampler2D s_fullbright;
uniform sampler2D s_paletted;
uniform sampler2D s_shadowmap;
uniform samplerCube s_projectionmap;
uniform samplerCube s_reflectcube;
uniform sampler2D s_reflectmask;
uniform sampler2D s_lightmap;
#define s_lightmap0 s_lightmap
uniform sampler2D s_deluxmap;
#define s_deluxmap0 s_deluxmap
uniform sampler2D s_lightmap1;
uniform sampler2D s_lightmap2;
uniform sampler2D s_lightmap3;
uniform sampler2D s_deluxmap1;
uniform sampler2D s_deluxmap2
uniform sampler2D s_deluxmap3;
*/

#ifdef VERTEX_SHADER
vec4 ftetransform()
{
	vec4 proj = (m_modelviewproj*vec4(v_position,1.0));
	proj.y *= -1;
	proj.z = (proj.z + proj.w) / 2.0;
	return proj;
}
#endif