// Copyright 2011 Riccardo Monica

#version 120 
#extension GL_EXT_geometry_shader4: enable

varying in vec3 position[6];

// FaceNormal.txt
vec3 ComputeNormal(in vec3 v1,in vec3 v2,in vec3 v3); 

void Emit(in int index)
  {
  gl_FrontColor = gl_FrontColorIn[index]; 
  gl_BackColor = gl_BackColorIn[index];
  gl_Position = vec4(position[index],1.0);
  EmitVertex();
  }

void main()
  {
  float fz = ComputeNormal(position[2],position[0],position[4]).z;
  if (fz < 0.0)
    return;

  float z021 = ComputeNormal(position[0],position[2],position[1]).z;
  float z432 = ComputeNormal(position[4],position[3],position[2]).z;
  float z540 = ComputeNormal(position[5],position[4],position[0]).z;
  

  if (z021 < 0.0)
    {
    Emit(2);
    Emit(0);
    EndPrimitive();
    }

  if (z432 < 0.0)
    {
    Emit(2);
    Emit(4);
    EndPrimitive();
    }
 
  if (z540 < 0.0)
    {
    Emit(0);
    Emit(4);
    EndPrimitive();
    }
  }
