// Copyright 2011 Riccardo Monica

#version 120
#extension GL_EXT_geometry_shader4: enable

varying out float gmatshininess;
varying out vec3 gmatspecular;
varying out vec3 geyeposition;
varying out vec3 gnormal;

varying in float vmatshininess[3];
varying in vec3 vmatspecular[3];
varying in vec3 veyeposition[3];

uniform float scale;

vec3 ComputeNormal(in vec3 v1,in vec3 v2,in vec3 v3);

void main()
  {
  gnormal = ComputeNormal(veyeposition[0],veyeposition[1],veyeposition[2]);
  
  vec3 vertex[3];                        // vertices using cartesian coordinates
  vec3 center = vec3(0.0,0.0,0.0);
  for (int i = 0; i < 3; i++)
    {
    vertex[i] = gl_PositionIn[i].xyz / gl_PositionIn[i].w;
    center += vertex[i];
    }
  center *= 1/3.0;
  center *= (1 - scale);
  
  for (int i = 0; i < 3; i++)
    {
    gl_FrontColor = gl_FrontColorIn[i];
    gl_BackColor = gl_BackColorIn[i];
    gl_Position = vec4(vertex[i] * scale + center,1.0);
    
    gmatshininess = vmatshininess[i];
    gmatspecular = vmatspecular[i];
    geyeposition = veyeposition[i];
    
    EmitVertex();
    }
    
  EndPrimitive();
  }
