void PointLightSource::renderSphere(const UsefulRenderData& render_data)
{
  glm::mat4 scaled_transform = absoluteTransform();
  scaled_transform[0][0] *= _sphere_scale;
  scaled_transform[1][1] *= _sphere_scale;
  scaled_transform[2][2] *= _sphere_scale;

  glUniformMatrix4fv(
    glGetUniformLocation(ShaderProgram::currentProgramId(), "M"),
    1,
    GL_FALSE,
    &scaled_transform[0][0]);
  glUniformMatrix4fv(
      glGetUniformLocation(ShaderProgram::currentProgramId(), "V"),
      1,
      GL_FALSE,
      &render_data.camera.viewTransform()[0][0]);
  glUniformMatrix4fv(
      glGetUniformLocation(ShaderProgram::currentProgramId(), "P"),
      1,
      GL_FALSE,
      &render_data.camera.projectionTransform()[0][0]);

  setupLightSourceUniforms(render_data);

  _sphere_mesh->render();
}
//virtual bool operator==(const Shader& rhs)const;
void GenericLightingUberShader::use(SubObject *so) throw (SimulatorException)
{
   GUARD(glUseProgram(mGLProgramHandle));


   //---------------------------------------------------------
   setupTransformationUniforms(so);
   //----------------------------------------------------------
   if( (mLocalShaderFeatures.shadingFeatures & SHADING_FEATURE_DIRECT_LIGHTING) !=0)
   {
	   setupLightSourceUniforms();
   }
   //----------------------------------------------------------
   VisualMaterial * visMat =  dynamic_cast<VisualMaterial*>(so->getMaterial());
   assert(visMat);
   setupMaterialUniforms(visMat);
//---------- uncategorized uniforms to come ------------------------------------------------
	bindVector3D("eyePositionW",URE_INSTANCE->getCurrentlyActiveCamera()->getGlobalTransform().getPosition());

}
void PointLightSource::renderQuad(const UsefulRenderData& render_data)
{
  setupLightSourceUniforms(render_data);
  _quad_mesh->render();
}
void DirectionalLightSource::render(const UsefulRenderData& render_data)
{
  setupLightSourceUniforms(render_data);
  _quad_mesh->render();
}