//This is what I used
//Vertex shader
attribute vec3 in_Position;
attribute vec4 in_Colour;
attribute vec2 in_TextureCoord;
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
void main()
{
vec4 col = in_Colour;
vec4 object_space_pos = vec4( in_Position, 1.0);
float top = 1.0 - mod( col.b * 255.0, 2.0); // identify upper vertex
object_space_pos.z -= 255.0 * col.a * top; //tilt using alpha
object_space_pos.y += col.a / 10.0; //tweak zfighting
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
v_vColour = vec4(col.rgb, 1.0); // lock alpha blend to fully opaque
v_vTexcoord = in_TextureCoord;
}
//fragment shader
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
void main()
{
vec4 sprite_col = texture2D( gm_BaseTexture, v_vTexcoord );
if (sprite_col.a < 1.0) { discard; } // discard non opaque sprite pixels
gl_FragColor = sprite_col * v_vColour;
}